【发布时间】:2018-02-19 20:19:00
【问题描述】:
我有两个功能。一个函数为某些数据生成签名。另一个函数验证数据的签名。我面临的问题是验证不返回true。我正在使用 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 端点上签名并在另一个端点上进行验证。
【问题讨论】:
标签: php base64 rsa signature phpseclib