Я пытаюсь подписать файл с помощью openssl_sign.
Мой код:
$pkeyid = openssl_get_privatekey($priv_key);
// compute signature
openssl_sign($data, $signature, $pkeyid, OPENSSL_ALGO_SHA1);
Echo $signature;
// free the key from memory
openssl_free_key($pkeyid);
Проблема в том, что он выводит странные символы, а не хеш sha1. Что я делаю неправильно? (Мой файл PHP закодирован в UTF8)
Выход:
šòеcÔÝ”KÿLÍvÎ*q‡m—Xz¬ëNðñÆÒÐLÉ6вcTO¯à„ØæØSª?tšü T/ß‹‡‚¤Sý³f¥Jª¥§š¯ŠqL¾ð›‹å-éuÇ–Öºþ¦ùn}"Ë?=˜JTÃj)ŒÉ~ˆ×†±ÍçÏZ5]þNÉÌOhÔMllCJY`k—W²IHrätv¨ôñ IµBÛÕBô€ŸIwèFd8 êÿ2äåçAØèÙtªˆÈÚ‡¹œ£šO.èiÿonE[ÑœZºZ @TpÉO•ݘ~ëq
Ожидал чего-то вроде:
Ol2rr4oaPHxfQL4ER8Ck15OEr8D8Cn9iGcsjZ8ves2IG7WOFFm0WUyQDAN30trNvO7vRQF25Uosw/Aflx3bRB1ezQNSn6mPvTzU6CPuSC+BBddytOyRvoLPhJ4F910yE8mrKeIuz1un8Dobm3PnZrlwCJecQbSilE4uIJ2rikl4=
PS: $ data содержит текст, который я пытаюсь подписать. Закрытый ключ загружен правильно, и я вручную помещаю его в свой файл. (он сформирован)
Я не думаю, что это хеш sha1 после нескольких попыток. Я все еще не могу заставить его работать ... Есть идеи?






Только бросьте свою строку в
$signature = base64_encode($signtaure);
echo"The sring hash is;".$signature;
перед сохранением на анили-фли или переменной
Шифрование SHA1 - не проблема.
Если вы хотите проверить знак
$privateKeyPem = file_get_contents($folder.'private_key.pem');
$publicKeyPem = file_get_contents($folder.'public_key.pem');
$signature = file_get_contents($folder.'signature.dat');
$signature = base64_decode($signature);
//echo "the signature is: ".$signature; for verify your string
if (openssl_verify($stringtosign, $signature, $publicKeyPem, 'sha256WithRSAEncryption') === 1) {
echo 'the sign is a valid sign ';
echo'<br> the generated hash is: '.$signature;
} else {
echo 'the sign is invalid';
}
Ладно, похоже, вывод в двоичном формате. Я использовал base64_encode, и теперь он выводит что-то более логичное. Все еще проводятся некоторые тесты. Странно то, что нигде не сказано, что ...