この質問では、wcrypt2について言及しています。
必要なのは、ファイルのMD5を計算することだけです。ストリーム形式でダウンロードされたファイルなので、保存せずに計算できれば完璧です。
私はそれを行うための最も簡単な方法が欲しいです。
ありがとう!
Indy 10 の作業コードは次のとおりです。
function MD5File(const FileName: string): string;
var
IdMD5: TIdHashMessageDigest5;
FS: TFileStream;
begin
IdMD5 := TIdHashMessageDigest5.Create;
FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
Result := IdMD5.HashStreamAsHex(FS)
finally
FS.Free;
IdMD5.Free;
end;
end;
よろしく、 OscaR1
@dummzeuch answere に基づいて、私はこの関数を書きました:
function getMD5checksum(s: TStream): string;
var
md5: TIdHashMessageDigest5;
hash : T4x4LongWordRecord;
begin
md5 := TIdHashMessageDigest5.Create;
s.Seek(0,0);
hash := md5.HashValue(s);
result := IntToHex(Integer(hash[0]), 4) +
IntToHex(Integer(hash[1]), 4) +
IntToHex(Integer(hash[2]), 4) +
IntToHex(Integer(hash[3]), 4);
end;
Indy にはいくつかのハッシュを計算する関数が付属しており、MD5 はその 1 つです。Indy は、少なくとも Delphi 2006 以降の Delphi のすべてのバージョンに含まれており、古いバージョンの無料ダウンロードとして利用できます。
どうですか:
function GetFileMD5(const Stream: TStream): String; overload;
var MD5: TIdHashMessageDigest5;
begin
MD5 := TIdHashMessageDigest5.Create;
try
Result := MD5.HashStreamAsHex(Stream);
finally
MD5.Free;
end;
end;
function GetFileMD5(const Filename: String): String; overload;
var FileStream: TFileStream;
begin
FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
Result := GetFileMD5(FileStream);
finally
FileStream.Free;
end;
end;
MessageDigest_5も同様に機能します。
あなたが言及したように、あなたがリンクした投稿wcrypt2
は、MD5 を含む暗号化ルーチンのライブラリであるについて語っています。リンク先の投稿は、質問者に「Delphi 7」というラベルの付いた出力が含まれているため、Delphi 7 で利用できることも示しているようです。あなたはこの質問delphi7
にタグを付けたので、それもあなたが使用しているバージョンだと思います。では、何があなたの使用を妨げているのwcrypt2
でしょうか?
質問はwcrypt2.pasのコピーにリンクしており、そのファイルの著作権の日付は、Delphi 7 がリリースされるまでにユニットが利用可能だったことを示しているようです。インストールを確認してください。あなたはすでにそれを持っているかもしれません。そうでない場合、ユニットはProject Jediを介して入手したとも言っているので、そこでユニットを探すこともできます.
参照されている質問への回答には、Delphi コードの例と、MD5 を実行するために Delphi に付属するユニットの名前が含まれています。これらは Delphi 2009 に付属しているため、お使いのバージョンでも利用できるかどうかを確認する必要があります。
このDelphi での MD5SUM の実装を見てください。入力には文字列が必要ですが、ストリームで簡単に動作させることができると思います。