delphi 中的 sha1 校验和
sha1 checksum in delphi
我在delphi中编写了以下代码。
with TIdHashMessageDigest5.Create do begin
st2.Position := 0;
Digest := HashValue( st2 );
SetLength( Hash, 16 );
Move( Digest, Hash[1], 16);
Free;
end;
我需要将其转换为使用 SHA1 哈希。我在库中找不到 SHA1 类型。谁能帮忙?我在互联网上寻求帮助,但找不到任何帮助。
看这里:
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;
您使用的似乎是不支持 SHA1 的 Indy 9。 Indy 10 中添加了 SHA1(以及其他一些哈希,包括其他几个 SHA)。Indy 10 中还重新编写了 TIdHash
的接口。在其他更改中,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;
还有两个选项:
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);
我在delphi中编写了以下代码。
with TIdHashMessageDigest5.Create do begin
st2.Position := 0;
Digest := HashValue( st2 );
SetLength( Hash, 16 );
Move( Digest, Hash[1], 16);
Free;
end;
我需要将其转换为使用 SHA1 哈希。我在库中找不到 SHA1 类型。谁能帮忙?我在互联网上寻求帮助,但找不到任何帮助。
看这里:
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;
您使用的似乎是不支持 SHA1 的 Indy 9。 Indy 10 中添加了 SHA1(以及其他一些哈希,包括其他几个 SHA)。Indy 10 中还重新编写了 TIdHash
的接口。在其他更改中,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;
还有两个选项:
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);