2023年12月10日

TSqidsEncodingで数値と短縮IDを相互変換する

このアーティクルはDelphi Advent Calendar 2023の10日目の記事です(1年ぶり9回目)。

Delphi 12 Athensで数値と短縮IDを相互変換するSqidsを実装したTSqidsEncodingが追加されました。
Sqidsはあくまで難読化であって暗号化ではないので、内容を隠すことはできませんが、ID番号などをそのまま見せるよりはまし、というような場合に有効です。Sqidsの公式サイトでは、適しているケースとして
  • 短縮リンク
    • URLで安全に使用できる
  • イベントID
    • 衝突しないエンコード/デコード
  • ワンタイムパスワード
    • 短く問題のあるワードを含まない
適していないケースとして
  • 機密データ
    • 暗号化されるわけではない
  • ユーザID
    • デコードすることでユーザ数が漏洩する
を挙げています。

使用方法は簡単で、エンコードするには
uses
  ..., System.NetEncoding.Sqids;

var
  Sqids: TSqidsEncoding;
begin
  Sqids := TSqidsEncoding.Create;
  try
    Edit2.Text := Sqids.Encode(Edit1.Text);

  finally
    Sqids.Free;
  end;
end;
デコードするには
var
  Sqids: TSqidsEncoding;
begin
  Sqids := TSqidsEncoding.Create;
  try
    Edit3.Text := Sqids.DecodeToStr(Edit2.Text);

  finally
    Sqids.Free;
  end;
end;
とするだけです。Sqidsのソースは数値ですが、エンコードではInreger、TArray<Integer>、Stringを受け取るoverloadが用意されています(Stringは単独またはカンマ区切りの数値表現)。
またデコードはTArray<Integer>を返すもの(Decode)、Integerを返すもの(DecodeSingle/TryDecodeSingle)、Stringを返すもの(DecodeToStr)が用意されています。
さらにコンストラクタにエンコード用の文字列を渡すことで生成される文字列をカスタマイズすることもできます。

2023/12/22追記: 公式のblogにもSqidsの使いかたの記事が出ました。
Sqids: RAD Serverとの統合およびスタンドアロンライブラリ (en)

0 件のコメント: