Кажется, что 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