2023年12月13日

TSqidsEncodingで文字列を難読化する

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

前回はDelphi 12 Athensで導入されたTSqidsEncodingを普通に使ってみましたが、TSqidsEncodingにはTArray<Integer>を扱うoverloadがあり、今回はそれを使って文字列を難読化してみます。
とはいっても、単にDelphiの文字列(UTF-16)の1文字を単純にUInt16(=Word)として扱うだけです。
uses
  ..., System.NetEncoding.Sqids;

type
  TSqidsEncodingHelper = class helper for TSqidsEncoding
  public
    function EncodeFromString(const AStr: String): String;
    function DecodeToString(const AHash: String): String;
  end;

function TSqidsEncodingHelper.EncodeFromString(const AStr: String): String;
var
  Values: TArray;
  I: Integer;
begin
  SetLength(Values,Length(AStr));
  for I := 0 to Length(AStr) - 1 do
  begin
    Values[I] := UInt16(AStr[I + 1]);
  end;
  Result := Encode(Values);
end;

function TSqidsEncodingHelper.DecodeToString(const AHash: String): String;
var
  Values: TArray;
  I: Integer;
begin
  Values := Decode(AHash);

  SetLength(Result,Length(Values));
  for I := 0 to Length(Result) - 1 do
  begin
    Result[I + 1] := Char(Values[I]);
  end;
end;
文字列の難読化としてXORやROT13などがよく使われますが、このほうがまだましな気がしますね。

0 件のコメント: