「Team Japan » Indy 9 と Indy 10 でハッシュ値を計算 – MD5, SHA-1, SHA-256」では、TIdHashMessageDigest5のHashBytesAsHexメソッドにバイト配列を渡す方法が紹介されています。
uses IdHashMessageDigest;
procedure TForm1.Button1Click(Sender: TObject);
var
md5: TIdHashMessageDigest5;
msg: String;
hash: String;
begin
msg := 'Hello, world';
md5 := TIdHashMessageDigest5.Create;
hash := LowerCase(md5.HashBytesAsHex(TEncoding.ASCII.GetBytes(msg)));
md5.Free;
ShowMessage(hash); //=> bc6e6f16b8a077ef5fbc8d59d0b931b9
end;
もう一つの方法として、TIdHashMessageDigest5のHashStringAsHexメソッドに文字列とエンコーディングを渡す方法があります。
md5.HashStringAsHex(msg, TEncoding.ASCII)
例
procedure TForm1.Button2Click(Sender: TObject);
var
md5: TIdHashMessageDigest5;
msg: String;
hash: String;
begin
msg := 'Hello, world';
md5 := TIdHashMessageDigest5.Create;
hash := LowerCase(md5.HashStringAsHex(msg, TEncoding.ASCII));
md5.Free;
ShowMessage(hash); //=> bc6e6f16b8a077ef5fbc8d59d0b931b9
end;
タイプ数が少しだけ少ないです。
追記
Pingback: C++Builder XEでMD5 « 山本隆の開発日誌