Как проверить подпись через PHP, созданную в командной строке OpenSSL? - PullRequest
1 голос
/ 15 декабря 2010

Кажется, что PHP-функции openssl_sign и openssl_verify выполняют хеширование данных перед подписью из-за ограничений по размеру, поэтому я попытался эмулировать это в командной строке.

Подписывание через openssl:

echo "foo" | openssl dgst -sha1 -binary | openssl rsautl -inkey priv.pem -sign > sig.bin

, затем проверка с помощью PHP

$key = openssl_pkey_get_public('pub.pem');
$ver = openssl_verify( "foo\n", file_get_contents('sig.bin'), $key, OPENSSL_ALGO_SHA1 );
// $ver always 0

Я пробовал многочисленные комбинации, двоичные и шестнадцатеричные формы хэша, с последующим символом новой строки и без него, и даже хэширование перед переходом вфункция php

1 Ответ

0 голосов
/ 15 декабря 2010

Мои выводы заключаются в том, что PHP sign и verify не совместимы с опциями openssl rsautl -sign и -verify PHP, кажется, добавляет некоторые метаданные (дополнительные 15 байтов), хотя я не знаю, что это значит.

Мое решение: Я использую функции шифрования и дешифрования напрямую и обрабатываю хеширование самостоятельно.

Таким образом, опция командной строки -verify аналогична «расшифровке с открытым ключом». По тому же признаку -sign аналогично «шифрованию с открытым ключом»

Фактически, таким образом, вы можете определить свой собственный формат подписи, например, включить дату вместе с хешем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...