Delphi+IndyでMD5、SHA1、BASE64

ども、Norimakiです。

PHPなどのソースはネットで探せば結構当たるもんですが、
Delphiでのソースはなかなか当たりません。

ということで、DelphiでSHA1、MD5、BASE64を求める方法を。
ただ、日本語は通らないみたいです。

uses .....
     ,IdHashMessageDigest,IdHash,IdHashSHA,IdCoderMIME;

procedure TForm1.MD5_SHA1_BASE64;
var InputStr:string;

    MD5   :TIdHashMessageDigest5;
    Sha   :TIdHash;
    Base64:TIdEncoderMIME;

    MD5Hash    :string;
    SHA1Hash   :string;
    MD5_Base64 :string;
    SHA1_Base64:string;
begin
 InputStr:='TEST STRING';

 MD5    :=TIdHashMessageDigest5.Create;
 MD5Hash:=LowerCase(md5.HashBytesAsHex
             (TIdBytes(TEncoding.ASCII.GetBytes(InputStr))));

 Sha     :=TIdHashSHA1.Create;
 SHA1Hash:=LowerCase(Sha.HashBytesAsHex
             (TIdBytes(TEncoding.ASCII.GetBytes(InputStr))));

 Base64     :=TIdEncoderMIME.Create;
 MD5_Base64 :=Base64.EncodeBytes(MD5.HashBytes
           (TIdBytes(TEncoding.ASCII.GetBytes(InputStr))));
 SHA1_Base64:=Base64.EncodeBytes(Sha.HashBytes
           (TIdBytes(TEncoding.ASCII.GetBytes(InputStr))));


 ShowMessage(InputStr   +#13#10
            +MD5Hash    +#13#10
            +Sha1Hash   +#13#10
            +MD5_Base64 +#13#10
            +SHA1_Base64+#13#10
            );

 FreeAndNil(MD5);
 FreeAndNil(Sha);
 FreeAndnil(Base64);
end;

ブログ投稿ツールには投稿APIを使うツールがあり、
XML-RPC方式なら普通にデータをPostしてあげればOKですが、
ライブドアやアメブロなどのATOM API方式ではWSSE認証が必要です。

WSSE認証にはSHA1とBASE64が必要で、
アメブロの場合はさらにパスワードをMD5化する必要があるとのこと。

ということで、SHA1、MD5、BASE64の処理を備忘録として載せておきます。

で、かなりハマったのがBASE64の処理。

Base64.EncodeBytes

の引数を普通の文字列で与えてしまっていたこと。

文字列は人間が見やすいように変換したものなので、
本来、Base64.EncodeBytesに渡すべきは、生のデータ。
つまり、文字列に変換する前のTIdBytesでなければいけない

ということ。

ちょっと考えれば当たり前なんですが、
そのちょっとに思い当たらないという。

まだまだ精進が足りません。

ではでは。
Norimakiでした。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする