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

1|0安装snowland-smx

1|1snowland-smx简介

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

1|2snowland-smx的安装

使用pip指令进行安装

pip install snowland-smx==0.3.2a1

1|3snowland-smx算法实现流程图

1|4snowland-smx实现SM2

使用python3进入python环境

1|0a. 密钥生成

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

1|0b. 签名

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

1|0c. 验签

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

1|0d. 加密

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

1|0e. 解密

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

1|5snowland-smx实现SM3

1|0a. 方法一

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

1|0b. 方法二

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

1|6snowland-smx实现SM4

1|0a. 加密

>>> 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)

就成功啦!

1|0解密

  • 使用以下命令进行解密
>>> 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)

码云仓库


__EOF__

本文作者userName
本文链接https://www.cnblogs.com/1314xhuan/p/16897756.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   20201325my  阅读(162)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示