- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为发件人创建一个 Signature() 函数来签署他/她的私钥,然后返回 $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';
}
然后,我在 Postman 上测试这两个功能
照片 1 - 3 用于 Signature() 函数
图 4 - 6 用于 Verify() 函数
照片 1:此 url 将调用 Signature() 函数。填充了 agent_code 和 private_passphrase 参数。 agent_code 是要由私钥签名的字符串,而 private_passphrase 是私钥的密码。
照片 4:此 url 将调用 Verify() 函数。填充了 agent_code 和签名参数。签名是从用于通过公钥验证的 Signature() 函数复制的
我不知道为什么它会返回Invalid Signature
,因为如果我在一个函数中编写签名和验证代码,它会为我回显“已验证”。 key 对正确并且 $signature 被正确复制。
感谢所有指导和纠正。
最佳答案
我正在将我的评论转化为答案。
我认为您的问题是由查询参数中的 +
符号引起的 - 它们被识别为 URL 编码空格。如果您使用的是 POST 而不是 GET,则不会有任何问题。
为了避免由通常的 Base64 编码引起的 URL 编码问题,我的建议是使用 Base64URL编码。与普通的Base64编码相比,它使用-
代替+
,使用_
代替/
。
关于php - 在 PHP 中通过发送方和接收方之间的公钥验证私钥的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62998681/
我是一名优秀的程序员,十分优秀!