gmssl icon indicating copy to clipboard operation
gmssl copied to clipboard

SM4-ECB加密pad问题

Open liyangzbx opened this issue 3 years ago • 3 comments

请问,python pip 安装的gmssl就是您的这个吗?里面sm4.py的crypt_ecb函数,这里会对SM4明文数据强制填充,比如我以HEX输入,送入16字节数据,这里仍然会强制填充16字节0x10 0x10...,这样就会输出32字节数据,同样的还有解密时的unpadding,以hex直接送入16字节数据就会报错。此处为什么要强制填充呢?SM4算法是按16字节分组加密,那送入16字节就算可以直接加密不需填充的。如需填充的话,能以让开发者自己在工程代码里选择是否更好?此处能否修改下? 微信截图_20210414091820

liyangzbx avatar Apr 14 '21 01:04 liyangzbx

我也有这个疑问,最初是无法直接解密32字节数据的时候发现的,后来发现加密32字节的数据多出16字节!

294068860 avatar Dec 11 '21 06:12 294068860

把源码中的padding函数和unpadding函数去掉就好了

294068860 avatar Dec 11 '21 08:12 294068860

经过研究,发现原来是因为填充的问题导致的,gmssl默认采用PKCS7Padding方式填充,16字节的倍数也会填充,会在填充的最后一个字节存放填充的字节数,等解密时,又会将最后填充的字节数删除。 所以密文必须符合 PKCS7Padding方式填充, 否则将很可能解密出来空字符串。

wzsx150 avatar Feb 23 '22 16:02 wzsx150