使用项目,我需要在C ++程序和PHP中使用字符串的SHA512哈希。
我正在使用带有DCPCrypt库的RAD Studio XE2 C ++构建器(版本DCPcrypt v2 Beta 3 - 推荐)。
这是我的C ++代码,所以非常简单的测试程序包含Edit1(文本输入)和Edit2(哈希输出)和一个按钮:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit2->Text = SHA512( Edit1->Text );
}
//---------------------------------------------------------------------------
String __fastcall TForm1::SHA512(String input){
if (input.Length() ) {
TDCP_sha512 *sha512 = new TDCP_sha512(this);
unsigned char array[192];
String output = "";
sha512->Init();
sha512->UpdateStr( Edit1->Text );
sha512->Final((void*)array);
for (int i = 0; i < 64; ++i) {
output += IntToHex(array[i], 2);
}
sha512->Free();
return output.LowerCase();
}
}
当我在Edit1字段中输入“TEST”并按下按钮时,我将得到哈希结果: 0881048f3717a7cc363ca50e2dd7229efceb30786f0dc33b1b2cbcc3929055d00ed594f96127156aab01f30b6f6d28b100cbd7975e168bc39e50251d96c6beef
当我在PHP代码中尝试相同时:
<?PHP
echo openssl_digest('TEST', 'sha512');
?>
这会给我完全不同的结果: 7bfa95a688924c47c7d22381f20cc926f524beacb13f84e203d4bd8cb6ba2fce81c57a5f059bf3d509926487bde925b3bcee0635e4f7baeba054e5dba696b2bf
如果我在两端比较字符串“1”,我可以产生匹配,但在添加更多字母后,C ++代码不会显示相同的结果。 使用一些我在网上发现的“在线”sha512表单时,我得到的结果与PHP代码相同。
有什么想法吗?