lpilp / phpsm2sm3sm4

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

与 Go 语言的 demo 调试不通 #56

Closed hl-lab closed 1 year ago

hl-lab commented 1 year ago

https://github.com/tjfoc/gmsm/blob/master/sm2/sm2_test.go 使用 go 的public key,报错: Fatal error: Uncaught Exception: publickey format error in /home/webroot/sm2/vendor/lpilp/guomi/src/sm/RtSm2.php:364 Stack trace: #0 /home/webroot/sm2/vendor/lpilp/guomi/src/sm/RtSm2.php(121): Rtgm\sm\RtSm2->_getKeyXY('3059301306072a8...')

1 /home/webroot/sm2/test.php(30): Rtgm\sm\RtSm2->doEncrypt('{"installrate...', '3059301306072a8...')

2 {main} thrown in /home/webroot/sm2/vendor/lpilp/guomi/src/sm/RtSm2.php on line 364

公钥必须是 130 位吗?

lpilp commented 1 year ago

你这个公钥是 hex asn1过的公钥,就是不知道是哪一种类型, do_encrypt目前只支持 hex的明文公钥,128或是130都可以,就前面差个04, 使用本函数,请将你的公钥 asn1 decode下,将公钥解出来, 可使用 util 下 myasn1 单独decode下,取出公钥, 只要decode一次就行,然后记下来,或是你熟悉的第三方的asn1 函数解开就可

hl-lab commented 1 year ago

你这个公钥是 hex asn1过的公钥,就是不知道是哪一种类型, do_encrypt目前只支持 hex的明文公钥,128或是130都可以,就前面差个04, 使用本函数,请将你的公钥 asn1 decode下,将公钥解出来, 可使用 util 下 myasn1 单独decode下,取出公钥, 只要decode一次就行,然后记下来,或是你熟悉的第三方的asn1 函数解开就可

问题顺利解决!非常感谢