PHP RSA 签名变量未验证
PHP RSA Signature Variable Not Verifying
我有两个功能。一个函数为某些数据生成签名。另一个函数验证数据的签名。我面临的问题是验证不 return 正确。我正在使用 phpseclib 库 http://phpseclib.sourceforge.net/rsa/2.0/examples.html
public function generate(){
$rsa = new RSA();
/*$rsa->setPublicKeyFormat(RSA::PRIVATE_FORMAT_PKCS1);
extract($rsa->createKey());
return "$publickey\r\n\r\n$privatekey";*/
$rsa->loadKey(base64_decode(env('RSA_PRIVATE_KEY')));
$data = 'hello';
$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
$signature = $rsa->sign($data);
return base64_encode($signature);
}
public function verify(Request $request){
$rsa = new RSA();
$data = 'hello';
$signature = 'HTwI8TU9tIGBSUOWxCI95oILWxdnY9K9rizZbusQMM5+vlD4IiFuU5YghWnRTO+zB4GKUxhOcEaf127X5Hs7m4M76etol7dxxxkFw8097OWuU+bh2YskFB2GLWjzRdamg7RyWYznlePyBlPH8QeBHiRMvHHivabGOmNTkgsF09E=';
$rsa->loadKey(base64_decode(env('RSA_PUBLIC_KEY'))); // public key
return $rsa->verify($data, base64_decode($signature)) ? 'verified' : 'unverified';
}
如果我像这样将两个函数组合成一个函数,它就可以正常工作。
$rsa = new RSA();
/*$rsa->setPublicKeyFormat(RSA::PRIVATE_FORMAT_PKCS1);
extract($rsa->createKey());
return "$publickey\r\n\r\n$privatekey";*/
$rsa->loadKey(base64_decode(env('RSA_PRIVATE_KEY')));
$data = 'hello';
$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
$signature = $rsa->sign($data);
$signature = base64_encode($signature);
$rsa->loadKey(base64_decode(env('RSA_PUBLIC_KEY'))); // public key
return $rsa->verify($data, base64_decode($signature)) ? 'verified' : 'unverified';
我不明白。我测试了很多方法,签名相同但不验证。我正在尝试在一个 API 端点上签名并在另一个端点上进行验证。
在你的 verify
函数中你没有这样做:
$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
您是在 generate
函数而不是 verify
函数中执行此操作。
在您的组合函数中,使用了相同的签名模式,因为使用了相同的对象。
我有两个功能。一个函数为某些数据生成签名。另一个函数验证数据的签名。我面临的问题是验证不 return 正确。我正在使用 phpseclib 库 http://phpseclib.sourceforge.net/rsa/2.0/examples.html
public function generate(){
$rsa = new RSA();
/*$rsa->setPublicKeyFormat(RSA::PRIVATE_FORMAT_PKCS1);
extract($rsa->createKey());
return "$publickey\r\n\r\n$privatekey";*/
$rsa->loadKey(base64_decode(env('RSA_PRIVATE_KEY')));
$data = 'hello';
$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
$signature = $rsa->sign($data);
return base64_encode($signature);
}
public function verify(Request $request){
$rsa = new RSA();
$data = 'hello';
$signature = 'HTwI8TU9tIGBSUOWxCI95oILWxdnY9K9rizZbusQMM5+vlD4IiFuU5YghWnRTO+zB4GKUxhOcEaf127X5Hs7m4M76etol7dxxxkFw8097OWuU+bh2YskFB2GLWjzRdamg7RyWYznlePyBlPH8QeBHiRMvHHivabGOmNTkgsF09E=';
$rsa->loadKey(base64_decode(env('RSA_PUBLIC_KEY'))); // public key
return $rsa->verify($data, base64_decode($signature)) ? 'verified' : 'unverified';
}
如果我像这样将两个函数组合成一个函数,它就可以正常工作。
$rsa = new RSA();
/*$rsa->setPublicKeyFormat(RSA::PRIVATE_FORMAT_PKCS1);
extract($rsa->createKey());
return "$publickey\r\n\r\n$privatekey";*/
$rsa->loadKey(base64_decode(env('RSA_PRIVATE_KEY')));
$data = 'hello';
$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
$signature = $rsa->sign($data);
$signature = base64_encode($signature);
$rsa->loadKey(base64_decode(env('RSA_PUBLIC_KEY'))); // public key
return $rsa->verify($data, base64_decode($signature)) ? 'verified' : 'unverified';
我不明白。我测试了很多方法,签名相同但不验证。我正在尝试在一个 API 端点上签名并在另一个端点上进行验证。
在你的 verify
函数中你没有这样做:
$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
您是在 generate
函数而不是 verify
函数中执行此操作。
在您的组合函数中,使用了相同的签名模式,因为使用了相同的对象。