C++ Builder CE tipsないしcode fragment

LockBox3なるコンポーネントを使って暗号化と複合化を行う

標準のコンポーネントではないので、“GetIt”というIDEの機能を使ってインストールします。あらかじめ使えるかどうかのサーベイはしておいた方が良いと思います。筆者はこれをしばらく使っていますが、安定性速度など特に問題ありません。

さて、GetItですが、IDEのトップメニューの”ツール”から下図のように“GetItパッケージマネージャー”を選択するか、

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

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

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

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

こうなればおけです。

新規VCLプロジェクトを作成し、空のフォーム上にパレットの最下部から

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

まず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となりました。

コメント