文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

平安银行esa接口对接 php生成sm2国密签名验签失败

2023-08-30 22:59

关注

难点

本次开发中主要的难点在于使用php生成sm2国密签名, 银行方面并没有专门的文档, 只给到一个java代码示例, 后续跟银行方开发要了一组数据和使用这组数据生成的sign (正是这组数据使开发过程走入了误区)

php类库

本次开发中使用了类库

composer require yuansir/php-gmssl

误区

在php代码中存在配置

// 是否固定签名不随机,好处是同一段参数的签名固定,增大别人的猜测的难度,// 同样的key + document每次签名是一样的,如果为false则每次不一样protected $useDerandomizedSignatures = true;

由注释可知当设置成false时相同参数每次生成的sign也是不同的
而之前银行方面给到的那组数据和sign一直作为了我们调试过程中是否正确的标准, 导致浪费了大量的时间,最后找java的朋友跑起了那段demo才发现这个问题每次sign都不一样,因此次数设置为

// 是否固定签名不随机,好处是同一段参数的签名固定,增大别人的猜测的难度,// 同样的key + document每次签名是一样的,如果为false则每次不一样protected $useDerandomizedSignatures = false;

关键

当然使用类库的

$sign = $sm2->doSign($data, $sm2Secret)

生成sign依然是不够的,如果给到的秘钥是base64格式还需要使用

$sign = $sm2->doSign($data, bin2hex(base64_decode($sm2Secret))

以上生成的sign依然无法验签通过,还需要进一步处理

$sign = $sm2->doSign($data, bin2hex(base64_decode($sm2Secret)));//关键$sign = base64_decode($sign);$a = ASNObject::fromBinary($sign)->getChildren();$aa = self::formatHex($a[0]->getContent());$bb = self::formatHex($a[1]->getContent());$sign = $aa . $bb;$sign = base64_encode(hex2bin($sign));public static function formatHex($dec){    $hex = gmp_strval(gmp_init($dec, 10), 16);    $len = strlen($hex);    if ($len == 64) {        return $hex;    }    if ($len < 64) {        $hex = str_pad($hex, 64, '0', STR_PAD_LEFT);    } else {        $hex = substr($hex, $len - 64, 64);    }    return $hex;}

此时拿到的sign才可以通过验签

来源地址:https://blog.csdn.net/wolegequ1993/article/details/130368397

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯