课设第一周进展(snowland-smx)

安装snowland-smx

snowland-smx简介

snowland-smx是python实现的国密套件,对标python实现的gmssl,包含国密SM2,SM3,SM4,SM9,ZUC等。其代码实现效率上优于gmssl,接口设计上也更加人性化,目前被snowland-djangohelper等项目使用。

snowland-smx的安装

使用pip指令进行安装

pip install snowland-smx==0.3.2a1

snowland-smx算法实现流程图

snowland-smx实现SM2

使用python3进入python环境

a. 密钥生成

from pysmx.SM2 import generate_keypair
pk, sk = generate_keypair()

b. 签名

from pysmx.SM2 import Sign
len_para = 64
sig = Sign("你好", sk, '12345678abcdef', len_para)

c. 验签

from pysmx.SM2 import Verify
len_para = 64
Verify(sig, "你好", pk, len_para)

d. 加密

from pysmx.SM2 import Encrypt
e = b'hello'
len_para = 64
C = Encrypt(e, pk, len_para, 0)  # 此处的1代表e是否是16进制字符串

e. 解密

from  pysmx.SM2 import Decrypt
len_para = 64
m = Decrypt(C, sk, len_para)

snowland-smx实现SM3

a. 方法一

from pysmx.SM3 import SM3
sm3 = SM3()
sm3.update('abc')
sm3.hexdigest()

b. 方法二

from pysmx.SM3 import hash_msg
s = 'abc'
hash_msg(s)

snowland-smx实现SM4

a. 加密

>>> from pysmx.SM4 import Sm4, ENCRYPT, DECRYPT
>>> key_data = b'20201325xjrxjrxjr'
>>> sm4 = Sm4()
>>> input_data = [1,2,3]
>>> sm4.sm4_set_key(key_data, ENCRYPT)
>>> msg = sm4.sm4_crypt_ecb()

按照网上资料我做到这个发现在执行msg = sm4.sm4_crypt_ecb()的时候发生了如下报错

File "<stdin>", line 1, in <module>
TypeError: sm4_crypt_ecb() missing 1 required positional argument: 'input_data'

我以为是没有传入传输input_data的原因,然后我将input_data数组放进去后:

发现报了一堆错误,这时候我们细看错误会发现 其错误原因是发生在路径为/usr/local/lib/python3.9/site-packages/pysmx/SM4/_SM4.py的SM4.py文件

File "/usr/local/lib/python3.9/site-packages/pysmx/SM4/_SM4.py", line 153, in sm4_crypt_ecb
    output_data = reduce(lambda a, b: a + b, map(lambda x: self.sm4_one_round(self.sk, x), tmp), [])

随后我才用cat指令查看这个文件

cat /usr/local/lib/python3.9/site-packages/pysmx/SM4/_SM4.py的SM4.py

可以看到input_data数组应该是至少为16位
我将input_data改为了
input_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]

然后再执行 msg = sm4.sm4_crypt_ecb(input_data)

就成功啦!

解密

  • 使用以下命令进行解密
>>> from pysmx.SM4 import Sm4, ENCRYPT, DECRYPT
>>> key_data = b'20201325xjrxjrxjr'
>>> sm4 = Sm4()
>>> sm4.sm4_set_key(key_data, DECRYPT)
>>> sm4.sm4_crypt_ecb(msg)

码云仓库

posted @ 2022-11-16 22:17  20201325my  阅读(130)  评论(0编辑  收藏  举报