PHP openssl_sign выводит странные символы

Я пытаюсь подписать файл с помощью 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ÉÌO­hÔ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 содержит текст, который я пытаюсь подписать. Закрытый ключ загружен правильно, и я вручную помещаю его в свой файл. (он сформирован)

Ладно, похоже, вывод в двоичном формате. Я использовал base64_encode, и теперь он выводит что-то более логичное. Все еще проводятся некоторые тесты. Странно то, что нигде не сказано, что ...

user1235861 18.05.2018 19:10

Я не думаю, что это хеш sha1 после нескольких попыток. Я все еще не могу заставить его работать ... Есть идеи?

user1235861 18.05.2018 20:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
389
1

Ответы 1

Только бросьте свою строку в

$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';
               }

Другие вопросы по теме