求助,和java对接国密sm2签名和验证不通过
代码
- 用的安装包
composer require lpilp/guomi
- PHP代码
$sm2 = new RtSm2('hex', false); // 公钥 $publicKey = 'xxxxxxxxxxxxxxxxxxxxxx'; // 私钥 $privateKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; $userId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; $data = '{"dateStart":"2023-03-29 00:00:00","dateEnd":"2023-03-30 00:00:00","orgId":"390912547139825664"}20230327143500'; $sign = $sm2 ->doSign($data, $privateKey, $userId); //验签 $m2SignVerify = $sm2->verifySign($data, $sign, $publicKey, $userId);
- java同事的代码
遇到的问题
用php和java最初生成的签名长度都是70或者71,对接签名验证不通过
我这边的java同事加了sm2.usePLainEncoding(),设置了PLainDSAEncoding编码后签名长度固定为64,和第三方的java签名验证通过
应该问题就差在这个编码,所以用php如何生成长度为64位的签名?
php始终是验证不通过,跪求PHP如何设置这个编码?
我又尝试安装了GmSSL-PHP这个扩展,签名结果和lpilp/guomi是一致的,长度也是70位,互相验签能通过。但是和java对接就是验证不通过
总感觉就差一点点,就是没找见原因,又遇到过的大佬还望指点!
我就想知道php差哪了,欢迎研究,转发分享,用php生成的签名能验证通过的,我管他叫大哥,咋的都行测试数据
验证工具网址私钥:24EE8C7931D7031E90A032ADB16CB31DD33F74E99A595823E7571C66D8287816 公钥:7FF1D10F4DDF67F9147B820900B4EDD915B65F8614D88DB02CFDDCEEEDE7A58B17118400DD172D2FCE8BC16E601455E2BFEA4E0553964FD1293B8CC18B66335D UserID:31323334353637383132333435363738 数据格式:选择ASC格式 签名的数据:12345678 验证方式:把生成的签名放在网站最下面签名后的数据里面,点公钥验签,显示通过为验证成功
@deatil 你这个签名是composer require lpilp/guomi这个包生成的吗,这个确实能验证通过,另外方便看下你的$sign咋生成的吗,和我的方法不一样吗。我生成的验证不通过那
我的代码