如果我使用openssl創建新的密鑰對,請使用私鑰簽署一些數據,並使用公鑰來驗證簽名......它的工作原理。未能在PHP中驗證openssl簽名
$ openssl genrsa -out mykey.pem 1024
$ openssl rsa -in mykey.pem -pubout > mypubkey.pem
$ echo 'It could be bunnies' > file.txt
$ openssl rsautl -sign -in file.txt -inkey mykey.pem -out sig.txt
$ openssl rsautl -verify -in sig.txt -inkey mypubkey.pem -pubin
It could be bunnies
不過,如果我嘗試使用OpenSSL庫在PHP驗證簽名失敗。
$pubkey = openssl_pkey_get_public(file_get_contents('/var/key/mypubkey.pem'));
$sig = file_get_contents('/var/key/sig.txt');
$data = file_get_contents('/var/key/file.txt');
$verifyResult = (openssl_verify($data, $sig, $pubkey) == 1);
類似的故事Crypt_RSA
$pubkey = file_get_contents('/var/test/mypubkey.pem');
$sig = file_get_contents('/var/test/sig.txt');
$data = file_get_contents('/var/test/file.txt');
$rsa = new Crypt_RSA();
$rsa->loadKey($pubkey);
$rsa->verify($data, $sig);
$verifyResult = $rsa->verify($data, $sig);
如何讓PHP很好的發揮?這些例子雖然簡單但卻準確地符合我的需求。在現實世界中,我只有數據,簽名和公鑰...
目前的Crypt_RSA文檔似乎表明PKCS1是默認的。但是,我沒有嘗試在驗證之前顯式調用setSignatureMode,因此您可能很正確。由於我的代碼已經移動,並且現在測試起來很不方便,所以給了你懷疑的好處(以及複選標記)。感謝您的回覆... –
默認爲CRYPT_RSA_SIGNATURE_PSS。它提供更好的安全性,但不兼容。 – neubert