LockBox3なるコンポーネントを使って暗号化と複合化を行う
標準のコンポーネントではないので、“GetIt”というIDEの機能を使ってインストールします。あらかじめ使えるかどうかのサーベイはしておいた方が良いと思います。筆者はこれをしばらく使っていますが、安定性速度など特に問題ありません。
さて、GetItですが、IDEのトップメニューの”ツール”から下図のように“GetItパッケージマネージャー”を選択するか、

あたらしいプロジェクトを作成したタイミングならば、右上コーナーの、

GetItパッケージマネージャを選択(クリック)。

このようなダイアログになるので、赤で囲った検索ボックスに”lockbox…”とか入力すると、

となりますので、上側のLockBox 3 2024.08を”インストール”します。少しだけごちゃごちゃして、若干の作業が進んで、

こうなればおけです。
新規VCLプロジェクトを作成し、空のフォーム上にパレットの最下部から

TCodecとTCryptographicLibaryをドラグアンドドロップします。今回は選べるプロパティーを一覧したいので、静的に配置しましたが、もちろん慣れれば動的に割り当ててもおけです。
まずTCodecのプロパティーCipherは、

のように選択肢が与えられていますが、今回は[Blowfish]を選びましょうかね。
その一つ上の“ChainMode”は、

ECB(with block padding)を選んでおきます。
CryptoLibraryは、D&Dしたコンポーネント

CryptographicLibrary1を選びます。これで使えるようになりました。
フォームには、TLabeledEditを5個、TButtonを2個、TLabelを1個置いて、それぞれ下図のように配置して、テキストの初期値を適宜設定します。

Encryptボタンをダブルクリックして、以下のコードを書きます。Codec1->EncryptAnsiString(まで書くと、

のようなヒントがポップアップして、正しい引数並びがわかります。(すばらしい。)もちろんヘッダーを覗いてもいいんですけどね。
void __fastcall TForm1::EncryptClick(TObject *Sender)
{
String results;
Codec1->Password = LabeledEdit2->Text;
Codec1->EncryptAnsiString(LabeledEdit1->Text,results);
LabeledEdit3->Text = results;
LabeledEdit4->Text = LabeledEdit2->Text;
}
Decryptボタンをダブルクリックして、
void __fastcall TForm1::DecryptClick(TObject *Sender)
{
String results;
Codec1->Password = LabeledEdit4->Text;
Codec1->DecryptAnsiString(results,LabeledEdit3->Text);
LabeledEdit5->Text = results;
if( LabeledEdit1->Text == LabeledEdit5->Text ) {
Label1->Font->Color = clBlack;
Label1->Caption = "Match";
}
else {
Label1->Font->Color = clRed;
Label1->Caption = "Not Match";
}
}
この時も、ヒントがでます。

これでおしまいです。F9を押してbuild and runしてみましょうか?

“Encrypt”ボタンをクリックすると、平文をキーで暗号化して、結果をBase64な暗号文にします。そのまま暗号化のキーを複合化のキーとして使って、“Decrypt”すると最初の平文がリストアされてMatchしました。ここで複合化のキーを1文字backspaceで削ってから”Decrypt”すると、

当然ながら、正しく複合化されません。Not Matchとなりました。
コメント