gpt4 book ai didi

php - 在 PHP 中通过发送方和接收方之间的公钥验证私钥的签名

转载 作者:行者123 更新时间:2023-12-04 15:22:36 25 4
gpt4 key购买 nike

我为发件人创建一个 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 是私钥的密码。 enter image description here

照片2:私钥以文件格式附在正文中 enter image description here

照片 3:返回 $signature enter image description here

照片 4:此 url 将调用 Verify() 函数。填充了 agent_code 和签名参数。签名是从用于通过公钥验证的 Signature() 函数复制的
enter image description here

图 5 : 公钥作为文件格式以正文形式附加 enter image description here

照片 6:无效签名 错误 enter image description here

我不知道为什么它会返回Invalid Signature,因为如果我在一个函数中编写签名和验证代码,它会为我回显“已验证”。 key 对正确并且 $signature 被正确复制。

感谢所有指导和纠正。

最佳答案

我正在将我的评论转化为答案。

我认为您的问题是由查询参数中的 + 符号引起的 - 它们被识别为 URL 编码空格。如果您使用的是 POST 而不是 GET,则不会有任何问题。

为了避免由通常的 Base64 编码引起的 URL 编码问题,我的建议是使用 Base64URL编码。与普通的Base64编码相比,它使用-代替+,使用_代替/

关于php - 在 PHP 中通过发送方和接收方之间的公钥验证私钥的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62998681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com