php 对接中行 国密加密解密 文档给的都是java的处理 用php怎么实现项目都是用php写的获取接口返回的加密数据后需要解密使用
自己只会用 php java 上面基本算是小白 看过有些大神用 php-java-bridge 此种方式这种方式做的跨语言解决。还需要写 java 代码封装 jar。这块因为不会 java 果断放弃了,如果有会 java 的可以查看 https://blog.csdn.net/qq_34585882/article/details/79581982
好了还是说说 php 怎么实现吧,自己看了很多文档尝试用
用了这个人家写好的 php sm2sm3sm4
项目目录预览 - phpsm2sm3sm4 - GitCode
按照文档已经配置 composer require lpilp/guomi php7.4 已打开 gmp 组件支持
把中行给的返回加密数据和秘钥都直接传入到 $sm2->doDecrypt () 方法内:
public function ceshi()
{
$sm2 = new RtSm2();
$publicKey = 'MFkwEwYHKoZIzj0CAQXXXXX1UBgi0DQgAEpg8H6Rou4UnDMGYs5qORGFkN6A4NlhIrk2AGWkTbS2B3QLKHMINDqhYAl024rzpTxaqbTq2w5sSFzgrEV28jkw=='; // 公钥
$privateKey = 'MIGTAgEAMBMGXXXXXXXAgEGCCqBHM9VAYItBHkwdwIBAQQgxWPNwsJu6Lq0xhPN2+2lVhyBir6BfJYXrR+MPpkwNhKgCgYIKoEcz1UBgi2hRANCAASmDwfpGi7hScMwZizmo5EYWQ3oDg2WEiuTYAZaRNtLYHdAsocwg0OqFgCXTbivOlPFqptOrbDmxIXOCsRXbyOT'; // 私钥
$skey = 'BONAPTWbfU7NhnRvZgJKT5YD9pHI+Z7MmGgBBAO/Thkp93AUGMGq6GcwoU2MPfq1JKDzbjNVTsrduV73er6dxXqgc0LWcphy4tYvVHsxM188XUHzRepYGfJwARCDDIT9WEY3royNIS/X8Wjwyn9um/ZS/DluFkL6vEakb+WLOz/H';
$str = $sm2->doDecrypt(bin2hex(base64_decode($skey)),$privateKey);
}
运行报错
现在也不知道这个phpsm2是否能解决这个问题直接尝试就不成功
查了文档说需要给私钥转成 16 进制的 如果转成 16 进制就没法验签成功了
不知各位有什么建议或者有没有和中行那边对接国密的 PHPdemo?
附:中行 java 解密流程链接 https://pan.baidu.com/s/191KI-6lvpvwzQHrjiImJGQ?pwd=q2km
最后还是让行内技术人员弄的一个java的web应用我直接通过curl_init链接地址传参数就行了
我对接的招行使用的也是国密,PHP根本用不了,人家的demo都是java版本的,只能搞一个java服务,中间做一层中转