Работа с проектом, где мне нужно иметь SHA512 хэш строки в программе C ++ и в PHP.
Я использую RAD Studio XE2 C ++ Builder с библиотекой DCPCrypt (версия 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 и нажму кнопку, у меня будет результат хеширования:
0881048f3717a7cc363ca50e2dd7229efceb30786f0dc33b1b2cbcc3929055d00ed594f96127156aab01f30b6f6d28b100cbd7975e168bc39e50251d96c6beef
Когда я пытаюсь сделать то же самое в коде PHP:
<?PHP
echo openssl_digest('TEST', 'sha512');
?>
Это даст мне совершенно другой результат:
7bfa95a688924c47c7d22381f20cc926f524beacb13f84e203d4bd8cb6ba2fce81c57a5f059bf3d509926487bde925b3bcee0635e4f7baeba054e5dba696b2bf
Я могу получить соответствие, если сравниваю строку «1» в обоих концах, но после добавления большего количества букв код C ++ не показывает одинаковые результаты.
При использовании некоторых «онлайн» форм sha512, которые я обнаружил в Интернете, я получаю те же результаты, что и в коде PHP.
Есть идеи?
Задача ещё не решена.
Других решений пока нет …