找回密码
 注册账号

QQ登录

只需一步,快速开始

《泰拉瑞亚下载-1.4.2.3版》 泰拉瑞亚服务器 - MOD模组下载

入驻泰拉战网 新手指引 - 升级 - 师徒

泰拉瑞亚合成表 泰拉卡牌 - 泰拉江湖 - 泰拉刺客

联系泰拉开发组👈进入 积分市场 - 房产交易 - 水晶获取

查看: 2304|回复: 0

[原生PHP] PHP实现SHA1WithRSA签名和验签

[复制链接]

466

主题

48

回帖

0

广播

论坛版主

积分
200
泰拉
0
水晶
0
铜钥匙
0
银钥匙
0
金钥匙
0

【江湖新秀】【宝剑回鞘】【泰拉达人】【奥运选手】

发表于 2020-6-25 18:09:48 | 显示全部楼层 |阅读模式
对接第三方服务时一般都会对数据签名和验签,sha1WithRSA是比较常用的一种签名算法,特别是和支付相关的的服务。
以下是使用 php 实现 SHA1WithRSA 签名和验签的方法:


  1. <?php

  2. //生成 sha1WithRSA 签名
  3. function genSign($toSign, $privateKey){
  4.     $privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" .
  5.         wordwrap($privateKey, 64, "\n", true) .
  6.         "\n-----END RSA PRIVATE KEY-----";

  7.     $key = openssl_get_privatekey($privateKey);
  8.     openssl_sign($toSign, $signature, $key);
  9.     openssl_free_key($key);
  10.     $sign = base64_encode($signature);
  11.     return $sign;
  12. }

  13. //校验 sha1WithRSA 签名
  14. function verifySign($data, $sign, $pubKey){
  15.     $sign = base64_decode($sign);

  16.     $pubKey = "-----BEGIN PUBLIC KEY-----\n" .
  17.                 wordwrap($pubKey, 64, "\n", true) .
  18.                 "\n-----END PUBLIC KEY-----";

  19.     $key = openssl_pkey_get_public($pubKey);
  20.     $result = openssl_verify($data, $sign, $key, OPENSSL_ALGO_SHA1) === 1;
  21.     return $result;
  22. }

  23. //测试
  24. $privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAILFLdmFwfNHCGk3vpwj/FR9XpE9jjVreLlOaIEkSAOWOfzxCF7pMeSy0UDroRLgfLD4nQbUcK5AT7gg8PEM6H99SEHcpBkTKhfK1iI5iU9sN/WGL2Ft5T/uwo+KD7X3CsqMD0HsMQtv/YHJeAz/SPf5zyD5KttwohXXzO8a3P1pAgMBAAECgYAchxl2f6iNAu0Bzyhk9bDBWcw8kRop6zUd7836hkizh51E4ew6kFLTGnNt3zl3XcO187aF2+htCxiZCY6md3NstJod1zshoXf2slxxPWRUK92sS0XzlVT6ahVTdq2tAS3hOY3ldtnfOXMmMQPNn9OqlALQGOH/hJatBV6ZQxpp0QJBAMGKsxJkg3M6sZEO4zUgWgnGN+uS6nwAWpCfBY7eDvYSN78BxGGLgn+t40c0R8M/n85IM8OUmfHxTGWN3hYyGuUCQQCs+Kg1ypul9XLTWrVApyvZxY4ZxjAWG4yW4xqbUtHWUkGyle7Dy8xiYezl0kWN81lJNTz3qrJ4ZvM825+7tPw1AkBDPNxZV3ITZiCqNHHa0xJ0sthajv/HdJgCBjz4FU09T7buNL705HLByLdc1VzZCBGMqKjTGZ0h4KKZ5V9ydpXBAkABpZx0Zql0uxGM0aBILU9Nk4P22tw6WajNBvyJ3hABamcVvDe5xYb8qNIInifrYhXHjKo38XghjVljivPKZb7BAkAt4pCUYLI7LzLeSh/lnVxA7jOaRI3UsngCXn9VA4f+dkNcKAftRQqe7ytudqG07GKoInnDiyjrYe4kTLym8zoc";
  25. $pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCxS3ZhcHzRwhpN76cI/xUfV6RPY41a3i5TmiBJEgDljn88Qhe6THkstFA66ES4Hyw+J0G1HCuQE+4IPDxDOh/fUhB3KQZEyoXytYiOYlPbDf1hi9hbeU/7sKPig+19wrKjA9B7DELb/2ByXgM/0j3+c8g+SrbcKIV18zvGtz9aQIDAQAB";

  26. //生成签名
  27. $sign = genSign("test", $privateKey);
  28. //校验签名
  29. $rs = verifySign("test", $sign, $pubKey);
  30. var_dump($rs);
复制代码


[发帖际遇]: 慕芷涵 在论坛发帖时没有注意,被小偷偷去了 3 泰拉. 幸运榜 / 衰神榜
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|友链申请|Archiver|手机版|小黑屋|游芯沙盒 ( 陕ICP备11006283号-1 )

GMT+8, 2024-5-20 01:58 , Processed in 0.107060 second(s), 37 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表