首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP发送方与接收方之间的公钥验证私钥签名

用PHP发送方与接收方之间的公钥验证私钥签名
EN

Stack Overflow用户
提问于 2020-07-20 15:22:29
回答 1查看 704关注 0票数 3

我为发送方创建一个签名()函数,用于签名他/她的私钥,然后返回$signature

代码语言:javascript
复制
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()函数。

代码语言:javascript
复制
 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被正确复制。

所有的指导和纠正将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-21 09:34:47

我正在把我的评论变成一个答复。

我相信,您的问题是由查询参数中的+符号引起的--它们被识别为URL编码的空格。如果你用的是POST而不是GET,那就没有问题了。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62998681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档