当前位置:   article > 正文

python gmssl SM4不填充加解密

python gmssl SM4不填充加解密

问题描述

 使用gmssl(python版本)进行SM4加/解密时结果与国标(GMT0002)不符,或解密失败,原因是gmssl默认使用PKCS7填充,国标文档里的样例是没有填充的。

解决方法

方法一:创建CryptSM4对象时将填充模式设为-1。这是笔者推荐的方法。

方法二:使用CryptSM4.one_round。这是个底层函数,每次只能加/解密一个分组。

例程

  1. from gmssl import sm4, func
  2. g_sData = '0123456789abcdeffedcba9876543210'
  3. g_sKey = '0123456789abcdeffedcba9876543210'
  4. def main():
  5. bufData = bytes.fromhex(g_sData)
  6. bufKey = bytes.fromhex(g_sKey)
  7. oSM4 = sm4.CryptSM4()
  8. oSM4.set_key(bufKey, sm4.SM4_ENCRYPT)
  9. r = oSM4.crypt_ecb(bufData)
  10. print(f'enc:{r.hex()}')
  11. oSM4 = sm4.CryptSM4(sm4.SM4_ENCRYPT, sm4.PKCS7)
  12. oSM4.set_key(bufKey, sm4.SM4_ENCRYPT)
  13. r = oSM4.crypt_ecb(bufData)
  14. print(f'enc:{r.hex()}')
  15. oSM4 = sm4.CryptSM4(sm4.SM4_ENCRYPT, sm4.ZERO)
  16. oSM4.set_key(bufKey, sm4.SM4_ENCRYPT)
  17. r = oSM4.crypt_ecb(bufData)
  18. print(f'enc:{r.hex()}')
  19. oSM4 = sm4.CryptSM4(sm4.SM4_ENCRYPT, -1) # 方法1
  20. oSM4.set_key(bufKey, sm4.SM4_ENCRYPT)
  21. r = oSM4.crypt_ecb(bufData)
  22. print(f'enc:{r.hex()}')
  23. oSM4.set_key(bufKey, sm4.SM4_DECRYPT)
  24. r = oSM4.crypt_ecb(r)
  25. print(f'dec:{r.hex()}')
  26. oSM4 = sm4.CryptSM4() # 方法2
  27. oSM4.set_key(bufKey, sm4.SM4_ENCRYPT)
  28. r = oSM4.one_round(oSM4.sk, bufData)
  29. r = func.list_to_bytes(r)
  30. print(f'enc:{r.hex()}')
  31. oSM4.set_key(bufKey, sm4.SM4_DECRYPT)
  32. #r = func.bytes_to_list(r)
  33. r = oSM4.one_round(oSM4.sk, r)
  34. r = func.list_to_bytes(r)
  35. print(f'dec:{r.hex()}')
  36. return
  37. if __name__ == '__main__':
  38. main()

例程输出:

enc:681edf34d206965e86b3e94f536e4246002a8a4efa863ccad024ac0300bb40d2
enc:681edf34d206965e86b3e94f536e4246002a8a4efa863ccad024ac0300bb40d2
enc:681edf34d206965e86b3e94f536e42462677f46b09c122cc975533105bd4a22a
enc:681edf34d206965e86b3e94f536e4246
dec:0123456789abcdeffedcba9876543210
enc:681edf34d206965e86b3e94f536e4246
dec:0123456789abcdeffedcba9876543210

注意事项

sm4.ZERO是一个名字叫“ZERO”的填充模式,不是不填充。

------完------

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/550498
推荐阅读
相关标签
  

闽ICP备14008679号