Lazarus/Freepascal を使用して開発したプログラムでテキストを暗号化する必要がありますが、TStrings 型のプロパティに保存する必要があるため、バイナリではなくテキストとして読み込んで復号化できるはずです。
どのアルゴリズムがそれに適していますか?
Lazarus/Freepascal を使用して開発したプログラムでテキストを暗号化する必要がありますが、TStrings 型のプロパティに保存する必要があるため、バイナリではなくテキストとして読み込んで復号化できるはずです。
どのアルゴリズムがそれに適していますか?
適切な暗号化を使用してから、base64 MIME エンコーディングを使用して、通常の文字列に格納できるプレーンな文字列にします。
正解は、やらないことです。テキストをテキストに暗号化するアルゴリズムを選択しないでください。
次の 2 つの手順を実行する必要があります。
どの暗号化方式を選択するかに関係なく、重要なのはバイナリをテキストに変換する方法です。これは、任意の暗号化が行われることを意味します。DCPCrypt、Windows 暗号化など、何でも選択できます。
バイナリをテキストに変換する方法は?
1)。たとえば、不正な文字をエスケープするだけでよいため、TStrings が混乱することはありません。特殊文字を選択します。例: #1.
ここで、文字列をエンコードするには、すべての #1 -> #1#2、#0 -> #1#3、#13 -> #1#4、#10 -> #1#5 を置き換えます。これは、TStrings が問題なくこれを受け入れるのに十分なはずです。
デコードするには - 逆の順序で行います: #1#5 -> #10、#1#4 -> #13、#1#3 -> #0、#1#2 -> #1 を置き換えます。
2)。あるいは、mj2008 が指摘したように、Base64 を使用することもできます。Base64 はよく知られている標準です。ただし、(前の方法と比較して) より肥大化したテキストが生成され、動作が少し遅くなる可能性があります (単純な検索と置換ロジックではなく、複雑なエンコーディング)。
3)。または、各バイトを 2 文字として書くこともできます: つまり、各バイトの 16 進コードを書きます (BinToHex のように)。これは base64 よりもさらに肥大化しますが (ただし、最速の可能性があります)、他のどの方法よりも実装が簡単であるという利点があります。Delphi にはすでに BinToHex/HexToBin ルーチンがあるため、多くのコードを記述する必要さえありません。
よく使われる Delphi dcpcrypt2 パッケージは、FPC/Lazarus で問題なく動作します。
http://www.cityinthesky.co.uk/cryptography.html
普段はラインデールを使っています。
Freepascal には、Delphi でも正常に動作する MIME エンコーディング用の独自のユニットがあります。