2010-12-15 6 views
1

PHPのopenssl_signopenssl_verify関数は、サイズ制限のために署名前にデータのハッシングを実行しているようですので、コマンドラインでこれをエミュレートしようとしました。OpenSSLのコマンドラインで作成されたPHPによる署名の確認方法は?

は、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関数に渡す前にハッシュする

答えて

0

私の知見は、PHPの署名と検証がopensslのrsautl -signとと相互運用できないということですオプションPHPはいくつかのメタデータ(余分な15バイト)を追加するようですが、私はそれが何を意味するのか分かりません。

私の解決策: 私は直接暗号化と復号化機能を使用しており、ハッシングを自分で処理しています。

このように、コマンドライン-verifyのオプションは、「公開鍵で復号化する」に類似しています。同じトークン-signことで は、ハッシュ

+0

[pkeyutl](HTTPと一緒に日を含め、たとえば、実際には

、あなたがあなた自身の署名の形式を定義することができ、この方法「公開鍵で暗号化」に似ています://www.openssl.org/docs/apps/pkeyutl.html#)コマンドは、ハッシュと署名を1ステップで実行できます。 –

+0

私のopenssl(Mac)のインストールにはこのユーティリティがありません – Tim

関連する問題