wechat-miniprogram / sm-crypto

miniprogram sm crypto library
MIT License
438 stars 88 forks source link

该包的加解密,与python的国密包 gmssl 不配套。 #13

Closed xinaiwunai closed 4 years ago

xinaiwunai commented 4 years ago

前端小程序使用sm-crypto const sm2 = require('miniprogram-sm-crypto').sm2;

后端使用的 gmssl包的 sm2_crypt = sm2.CryptSM2(public_key=public_key, private_key=private_key)

既然密文互相无法正确加解密。

xinaiwunai commented 4 years ago

前端小程序使用sm-crypto 加密后的密文 格式为如下: 56c20a877a6f065a16fd65944486a6ef151149d9a0f07b07c4fc6f7b5f99a651adc93db4681e741185d32d3bf21fcc88fea2e0a8cf33777b668d3b1d17274962d7d230be72584260b865f0f5a0518dbc8d1bc2e0b25f4e33db408c7173039a51f3b23b54d67fd0c17ef08567b0a154fd2de77284b6572f5d9a2bf693e2554d389ca29d3166a6ce8e0dc7730e1b97885814bcd4bae20a26ea855f121bfb255437bcc209ca55963c0eb260a96b1e862b88531422027d712ea02dada0d31d2af3a062ea18905757f037a45ed7adebe5244f9b2acc2cdab9708af8f38052006e510b4093b6892a7f3c57e2553dd49fe566d733

后端python的gmssl包对同一个明文加密后,用同样的密钥对,加密后,密文格式如下: b'c\xe0=\x85\xc5\x9c\xd6M\x87:{\xe6"\xae\xd7^\x97\xec\xfa\xf5\x94\xb3t\x17\x17\x08V\xd4\xa0)\xe5\x9fJ\x96\xf7taG\xaa3E\xbe\xb9*d\xb58k\xebmg]\xdc\x1e^\xee\xff\x86,:\xaa1R{%\x19Ip\xcfQzv9\xd5!\xb9\xdc\t\x05K\x171\x91|Q\x13\xc7I\x17\xf2\x9d(\xa5\xd2\xda\xde\xd7\xb4\xd8\x1f\xab\x91\x1e"l\rz\xac\x11Z\xbeX\x1a4r\xda}2\x91\x97\xb8\xb1g\xa4\xafO\xc2\xb5\x9bs\x9aS\xdc}Vqy\xe5\xf3~\xfd\xe5\xb8\xa0q\xdd\xce\xf5\r& U\xa4\xb7\xe2\x0e\xb0\xbc\x1a\xc3\x02\x92HD\xb9\xff?U\xba\x10\xdb6\xb1n\xed\x07\x98\xe2P\xbe\x8b\xb4Q\xce#>\xf2\x8f\xce\xf0v\x04(N\xee!\x02\x81c\xbb\xc0\xb6\x98\t\xae\x98R\x1cO \x83\xfc"5\xd7\x0e\xff\xf0u\xb70m\x9b\xc4\xa0\x92i\xdd\xae\xfcH\xa3\xf7\xc2 .\t\xc3\x9e'

xinaiwunai commented 4 years ago

我已经发现问题了。

微信小程序 sm-crypto 加密后的报文 ms,要转bytes类型,在python 3.5 版本之后,使用 ms = bytes.fromhex(ms) #字符串转hex 然后再使用gmssl提供的 sm2_crypt.decrypt( ) 方法进行解密就可。 ms = sm2_crypt.decrypt(ms) #得到明文,格式为bytes ms = v2.decode() # bytes转字符串 ,默认使用‘UTF-8’进行编码

JuneAndGreen commented 4 years ago

是的,此包提供的加密输出是16进制串。这里没有问题我就先关闭了,有其他问题可新提issue或者repoen此issue。