2012-12-05 31 views
3

爲什麼TIdHMACSHA256 +(Indy/delphi)的HashValue函數總是返回空?例如,下面的代碼不起作用。TIdHMACSHA256.TIdHMACSHA384.TIdHMACSHA512在Delphi中不起作用

var 
    Hash: TIdHMACSHA256 ; 
    HashValue: TBytes; 
begin 
    SetCurrentDir(ExtractFilePath(ParamStr(0))); 
    Hash := TIdHMACSHA256 .Create; 
    try 
    Hash.Key := TEncoding.ASCII.GetBytes('devaee2'); 
    HashValue := Hash.HashValue(TFile.ReadAllBytes('menu.xml')); 
    // HashValue is an empty array, why? 
    Tag := Length(HashValue); 
    TFile.WriteAllBytes('menu.xml.hash', HashValue); 

    finally 
    FreeAndNil(Hash); 
    end; 
end; 

回答

2

快速查看Indy 10來源,他們沒有編碼SHA256-512r散列,並使用某種系統散列(??)。 請檢查TIdHashSHA256.IsAvailable - 很可能它會返回false。

6

問題是,您沒有成功加載實現散列所需的OpenSSL庫。致電IdSSLOpenSSL.LoadOpenSSLLibrary。您還需要確保您的程序能夠找到合適的OpenSSL DLL。

0

尋找組件TDCP(嘗試https://bitbucket.org/wpostma/dcpcrypt2010)。源是完整的。適用於Rad Studio 2007 ... XE5 原生Delphi,你有SHA1但沒有SHA2和其他(我認爲是因爲法律,或者我不知道...)

相關問題