2016-08-11 90 views
1

我用delphi編寫下面的代碼。sha1在delphi中的校驗和

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

我需要將其轉換爲使用SHA1散列。我在庫中找不到SHA1類型。誰能幫忙?我在互聯網上尋找幫助,但找不到任何。

+1

SHA1不安全不含任何添加劑的 –

回答

0

你似乎使用Indy 9,它不支持SHA1。在Indy 10中添加了SHA1(以及一些其他SHA,包括幾個其他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;  
+0

嗨雷米, 感謝您的時間。我會用它來看看它是如何爲我工作的。我正在使用德爾福2005年。你可以建議從哪裏獲取IdGlobal.pas作爲我產生了很多「未聲明的標識符」錯誤? – MKK

+0

@MKK如?僅靠自己獲得更新的IdGlobal.pas是不夠的,你需要整個Indy庫的更新版本。 –

3

在這裏看到:

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; 
+0

答案,但off-site鏈接是不能接受的在這裏。 –

0

兩個更多的選擇:

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);