前回は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 件のコメント:
コメントを投稿