Delphi 中的sha1校验和

cbwuti44  于 2022-11-04  发布在  其他
关注(0)|答案(4)|浏览(247)

我有下面的代码写在 Delphi 。

with TIdHashMessageDigest5.Create do begin
    st2.Position := 0;
    Digest := HashValue( st2 );
    SetLength( Hash, 16 );
    Move( Digest, Hash[1], 16);
    Free;
end;

我需要将其转换为使用SHA1哈希。我在库中找不到SHA1类型。有人能帮忙吗?我在网上找过帮助,但没有找到。

vwkv1x7d

vwkv1x7d1#

请参阅此处:
https://sergworks.wordpress.com/2014/10/25/high-performance-hash-library/
SHA1 hashing in Delphi XE
https://sourceforge.net/projects/sha1implementat/
http://www.colorfultyping.com/generating-a-sha-1-checksum-for-a-given-class-type/
顺便说一句,你没有提到你的 Delphi 版本。如果你使用的是一个现代版本(XE以上),我想它的标准库应该支持SHA-1,MD5等。
您可以这样做:

uses IdHashSHA;

function SHA1FromString(const AString: string): string;
var
  SHA1: TIdHashSHA1;
begin
  SHA1 := TIdHashSHA1.Create;
  try
    Result := SHA1.HashStringAsHex(AString);
  finally
    SHA1.Free;
  end;
end;
mi7gmzs6

mi7gmzs62#

您使用的似乎是Indy 9,它不支持SHA1。SHA1(以及其他一些哈希,包括其他几个SHA)。TIdHash的接口也在Indy 10中重新编写。在其他更改中,HashValue()方法被新的Hash...()Hash...AsHex()方法取代(HashString(AsHex)HashStream(AsHex)HashBytes(AsHex)),例如:

uses
  ..., IdHash, IdHashMessageDigest;

var
  Hash: TIdBytes;
begin
  with TIdHashMessageDigest5.Create do
  try
    st2.Position := 0;
    Hash := HashStream( st2 );
  finally
    Free;
  end;
  // use Hash as needed...
end;
uses
  ..., IdHash, IdHashSHA;

var
  Hash: TIdBytes;
begin
  with TIdHashSHA1.Create do
  try
    st2.Position := 0;
    Hash := HashStream( st2 );
  finally
    Free;
  end;
  // use Hash as needed...
end;
9nvpjoqh

9nvpjoqh3#

还有两个选项:
http://www.spring4d.org

unit Spring.Cryptography.SHA;

TSHA1 = class(THashAlgorithmBase, ISHA1)

http://lockbox.seanbdurkin.id.au/HomePage

unit LbProc;
procedure StreamHashSHA1(var Digest : TSHA1Digest; AStream : TStream);
procedure FileHashSHA1(var Digest : TSHA1Digest; const AFileName : string);
mec1mxoz

mec1mxoz4#

为了以防万一,在最新的 Delphi 版本中,您可以尝试:

uses
  System.Hash;

...

function getHashCode(const s : string) : string;
begin
  Result := THashSHA1.GetHashString(s);
end;

相关问题