RSA签名验证-OpenSSL与phpseclib

RSA签名验证-OpenSSL与phpseclib,php,openssl,rsa,phpseclib,php-openssl,Php,Openssl,Rsa,Phpseclib,Php Openssl,我有以下代码: $publicKey=[ “e”=>新的phpseclib\Math\biginger('65537'), “n”=>新的phpseclib\Math\biginger6)BBB5 2 E7 BB4 4 4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 BBBBB5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6

我有以下代码:

$publicKey=[
“e”=>新的phpseclib\Math\biginger('65537'),
“n”=>新的phpseclib\Math\biginger6)BBB5 2 E7 BB4 4 4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 BBBBB5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 726479E28CB4C50B622DC1289EF037D22590613F27DD06D03454173BCDE930BB0FFAE9E0F02876A5AD382DFDD688E2BC3ACCA40911116CA14A158437095F5022AA578B59ADF7C7C0D138EF5728077F12165',16),
];
$signedData=hex2bin(“49960DE5880E8C687434170F6476605B8FE4AEB9A28632C7995CF3BA831D97630000001A48EFA635493D349AF3B7B7C19AD3162F599DAC711A5408114D6E0077857C1”);
$signature=hex2bin("A6B45E8F08DAAE55363AB08C6AEF9A0D9A03912863997041350A9DC6590072ABEE3EA7CD11FF6E9BB6361C262D6520D5345AF032D79D13F05EF15A9152CE2784BE7FD85C9A562062A2DB066B06B5882532F5171A2D553B81FAC0209AC0A561A14C6EB21F16B86B03E8E8D2AEF264EF176F4B7D520FE22AF988CB2D45620622AD062B066B06B5882537FAC2898CF28538CF28538CF28758CF28758B18CF28758CF28758B8CF28758B8CF28758B8CF28758B8CF28758B8CF28758CF28758CF28758CF28758B8B8CF28752D98AD03852E139483BF2AC50C322EB7B24128C58553B121932561053E4F1C8565E407631A608154881F3FBB93EC3822084E6A2262873C424B5A9714D2A8B3E8EAEB70C057E1FCBAAE0F46B73B209D”);
$rsa=新的rsa();
$rsa->loadKey($publicKey);
$rsa->setHash(“sha256”);
$publickey=$rsa->getPublicKey();
$rsavirify=$rsa->verify($signedData,$signature);
$opensslVerify=openssl\u验证($signedData,$signature,$publickey,openssl\u ALGO\u SHA256);
var_dump($rsavirify,$opensslVerify);
其结果如下:

/app/example/test.php:35:boolean false
/app/example/test.php:35:int 1
从本例中可以看出,
openssl\u verify()
函数返回成功,而seclib verify返回失败。即使
openssl\u verify()
中使用的PEM是从seclib RSA对象派生的


为什么
$rsa->verify()
openssl\u verify()
成功时失败?

您的示例无法运行,因为未定义
$key
。出于可复制性目的,我建议创建一个伪密钥

也就是说,问题很可能是正在使用的填充模式。默认情况下,phpseclib使用不太常见但更安全的填充,而OpenSSL使用不太安全但更常见的填充

要使phpseclib像OpenSSL一样使用PKCS1填充,请执行以下操作:

$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);

你好@neubert,我已经编辑了我的代码。从我的IDE传输代码示例时出错。谢谢你的回复,我现在就给你建议。谢谢你,这是一个困扰我太久的问题的简单解决方案:D