lpilp / phpsm2sm3sm4

php版本,支持国密SM2的签名算法,非对称加解密,SM3的hash, SM4的对称加解密
301 stars 67 forks source link

您好,对接的是浦发的sm2 #43

Closed 791487145 closed 1 year ago

791487145 commented 1 year ago

gmp_init(): Unable to convert variable to GMP - string is not an integer in file /Users/szh/laravel/nmydmall/vendor/lpilp/guomi/src/sm/RtSm2.php on line 170 解密的时候他的密文我得到的就是这个错误

lpilp commented 1 year ago

第170行: $p1 = new Point( $adapter, $generator->getCurve(), gmp_init($c1X, 16 ), gmp_init( $c1Y, 16 ) ); 这个函数暂时是只支持 加密串是 hex的, 你这个报错说明$cx1 不是16进制数,你看下加密串是什么数,最大可能是base64的, 那在解码前需要 bin2hex(base64_decode($str)) 下

791487145 commented 1 year ago

我见他给我的密文是BNjwOfoQ8W/DcvTynswzo4x1vDsC+EBuTiArjwnK7jCUOvhlrI71Py+MoapcWX8lRdL5/TpmrIJuS+sDScOmFr7ZQmYTSznG+mtR9W3eh9530eot46pMpeCGSt+v2/h6vyxlMlUiXIKF1FSJGnuYAxUnTFGc7FYIkXh2Qn118fvpKuibJ/T8DxP6+ZW3p2Wtq7hsrMFwS7dZNyAqrnJiAqMtJph7B7pO7UADRkUyhcFRZkJznTfgwfKii1AL+2lzxPs19ehvkDK1TZXzVZvL55zligVPL98MmgBxe7gIFzO0r3oRqUv8p+gxWiutqAMtKhnqj4IhDlGBW8zvmWHgHWLG有这种+/特殊符号的,我用的test里的例子, $sm2 = new RtSm2('base64',true); $document = "我爱你ILOYOU!"; echo "\n原始: $document"; $m2EncryptData = $sm2 ->doEncrypt($document, $publicKey); echo ("\n加密后: ".$m2EncryptData); //$m2EncryptData = $request->post('data');

    $m2DecryptData = $sm2->doDecrypt($m2EncryptData,$privateKey,1);

生成的就是字母和数字

791487145 commented 1 year ago

是您说的问题,谢谢啦,找了好一天找不到问题

lpilp commented 1 year ago

这个sm2 的加解密是后来加的,没有加入相关的编码形式,刚更新了下,如果构造的时候是base64的就按base64解决