4

この質問では、wcrypt2について言及しています。

必要なのは、ファイルのMD5を計算することだけです。ストリーム形式でダウンロードされたファイルなので、保存せずに計算できれば完璧です。

私はそれを行うための最も簡単な方法が欲しいです。

ありがとう!

4

9 に答える 9

14

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

于 2010-10-20T11:28:03.990 に答える
5

@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;
于 2009-01-16T14:39:29.227 に答える
3

Indy にはいくつかのハッシュを計算する関数が付属しており、MD5 はその 1 つです。Indy は、少なくとも Delphi 2006 以降の Delphi のすべてのバージョンに含まれており、古いバージョンの無料ダウンロードとして利用できます。

于 2009-01-15T19:42:48.433 に答える
2

どうですか:

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;
于 2013-03-27T12:42:58.997 に答える
1

MessageDigest_5も同様に機能します。

于 2009-01-15T21:14:00.497 に答える
1

あなたが言及したように、あなたがリンクした投稿wcrypt2は、MD5 を含む暗号化ルーチンのライブラリであるについて語っています。リンク先の投稿は、質問者に「Delphi 7」というラベルの付いた出力が含まれているため、Delphi 7 で利用できることも示しているようです。あなたはこの質問delphi7にタグを付けたので、それもあなたが使用しているバージョンだと思います。では、何があなたの使用を妨げているのwcrypt2でしょうか?

質問はwcrypt2.pasのコピーにリンクしており、そのファイルの著作権の日付は、Delphi 7 がリリースされるまでにユニットが利用可能だったことを示しているようです。インストールを確認してください。あなたはすでにそれを持っているかもしれません。そうでない場合、ユニットはProject Jediを介して入手したとも言っているので、そこでユニットを探すこともできます.

参照されている質問への回答には、Delphi コードの例と、MD5 を実行するために Delphi に付属するユニットの名前が含まれています。これらは Delphi 2009 に付属しているため、お使いのバージョンでも利用できるかどうかを確認する必要があります。

于 2009-01-15T19:43:18.307 に答える
1

このDelphi での MD5SUM の実装を見てください。入力には文字列が必要ですが、ストリームで簡単に動作させることができると思います。

于 2009-01-15T19:48:15.223 に答える