0

处理我需要在 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”并按下按钮时,我将得到哈希结果:0881048f3717a7cc363ca50e2dd7229efceb30786f0dc33b1b2cbcc3929055d00ed594f96127156aab01f30b6f6d28b100cbd79275e168b6639d

当我在 PHP 代码上尝试相同时:

<?PHP
    echo openssl_digest('TEST', 'sha512');
?>

这会给我完全不同的结果: 7bfa95a688924c47c7d22381f20cc926f524beacb13f84e203d4bd8cb6ba2fce81c57a5f059bf3d509926487bde925b3bcee0635e4f7baeba054e5dba696b2bf

如果我在两端比较字符串“1”,我可以产生匹配,但是在添加更多字母后,C++ 代码不会显示相同的结果。当使用我从网上找到的一些“在线”sha512 表单时,我得到的结果与 PHP 代码中的结果相同。

有任何想法吗?

4

0 回答 0