Hatena::ブログ(Diary)

Ko-Taのバ・ー・ルのようなもの

2007-10-15

uSHA256.pas

今渋谷の若い子の間で大人気のSHA256をDelphiに移植してみました。

作成にはSYN氏のソースコードを元にしております。

http://www.emit.jp/sha/sha.html

オイシイゴハン、アリガトウゴザイマス!


・ダウンロード

http://kota.dokkoisho.com/#SHA256


・概要

SHA(Secure Hash Algorithm)の256Bit版です。

任意のデータから(重複しにくい)64文字のハッシュコードを取得します。(DWORD[8]なデータも取得可能)

md5と同じく、巨大なデータにおける比較(某画像掲示板の画像重複チェックとか)、ファイルのCRCチェック、暗号鍵などに使用されます。

それなりに時間がかかるので使用にはちょっと工夫が必要かもしれません。


・サンプル

ファイルからSHA256のハッシュコードを取得します。

処理に要した時間も表示されますので、おおよその処理速度の目安にしてください。


・使い方

TSHA256クラスを生成し、Loadを使ってデータを流し込みます。

var
  ms : TMemoryStream;
  sha256 : TSHA256;
  s : String;
begin
  ms := TmemoryStream.Create;
  ms.LoadFromFile('sample.bmp');
  sha256 := TSHA256.Create;
  sha256.Load(ms.Memory,ms.Size);
  sha256.Final;
  s := sha256.GetDigest;
  sha256.Free;
  ms.Free;
  〜
end;

・あとがき

DelphiはC++のようなinline展開が使えないので所有しているDelphiはinline展開が使えないので”ちょっとだけ”アセンブラ化して高速化しときました。

コードの中にアセンブラ命令を意識したような処理部分(BitRotate)もありましたので、使わない場合に比べると2.5倍ぐらい速くなっちゃった:-D

それでもAthlon64 X2 5600+環境下で約3MBに対して80ms要したので、速度が必要な部分での使用(ハッシュ生成)は避けた方が無難なようです。


・SHAについて

http://ja.wikipedia.org/wiki/SHA

SHA384なんてあるんだー。ほへー。

B002HWR46W
カプコン
購入: 3人 クリック: 50回
479810955X
翔泳社 日向俊二
購入: 7人 クリック: 90回

uskzuskz 2007/10/15 09:27 Delphi 2005以降はインライン関数があったような気がします
function Max(const X,Y: Integer): Integer; inline;
begin
 if X > Y then Result := X else Result := Y
end;

Ko-TaKo-Ta 2007/10/15 18:32 なんと!時代は進んでますなー。(どうアセンブラ展開されるかちょっと興味津々)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証