我为发送方创建一个签名()函数,用于签名他/她的私钥,然后返回$signature
use phpseclib\Crypt\RSA;
public function Signature(Request $request)
{
$agent_code = $request->agent_code;
$private_key = $request->private_key;
$private_passphrase = $request->private_passphrase;
$string = $agent_code;
$private_key = File::get($private_key);
$rsa = new RSA();
$rsa->setPassword($private_passphrase);
$rsa->loadKey($private_key); // private key
$signature = base64_encode($rsa->sign($string));
return $signature;
}在此之后,传递$signature来验证接收方使用他/她的公钥验证签名的Verify()函数。
public function Verify(Request $request)
{
$agent_code = $request->agent_code;
$public_key = $request->public_key;
$signature = $request->signature;
$string = $agent_code;
$public_key = File::get($public_key);
$rsa = new RSA();
$rsa->loadKey($public_key); // public key
echo $rsa->verify($string, base64_decode($signature)) ? 'verified' : 'unverified';
}然后,我在邮递员上测试了这两个功能。
图1-3用于签名()函数
图4-6用于验证()函数。
图1:这个url将调用Signature()函数。agent_code和private_passphrase参数被填充。agent_code是由私钥签名的字符串,而private_passphrase是私钥的密码。

图片2:私钥以正文形式附呈文件格式。

图片3:返回$signature

图4:这个url将调用Verify()函数。agent_code和签名参数已被填充。签名是从签名()函数中复制的,该函数用于验证公钥

图片5:公钥以正文形式附呈文件格式。

图片6:Invalid signature错误

我不知道它为什么返回Invalid Signature,因为如果我在一个函数中编写签名和验证代码,它将为我回显“验证”。密钥对正确,$signature被正确复制。
所有的指导和纠正将不胜感激。
发布于 2020-07-21 09:34:47
我正在把我的评论变成一个答复。
我相信,您的问题是由查询参数中的+符号引起的--它们被识别为URL编码的空格。如果你用的是POST而不是GET,那就没有问题了。
为了避免由通常的Base64编码引起的URL编码问题,我的建议是使用Base64URL编码。与普通的-编码相比,它使用+代替_代替/。
https://stackoverflow.com/questions/62998681
复制相似问题