snowland-smx密碼演算法庫
snowland-smx密碼演算法庫
一、snowland-smx密碼演算法庫的介紹
snowland-smx是python實現的國密套件,對標python實現的gmssl,包含國密SM2,SM3,SM4,SM9,ZUC等。其程式碼實現效率上優於gmssl,介面設計上也更加人性化,目前被snowland-djangohelper等專案使用。
引用於:https://zhuanlan.zhihu.com/p/347417866
二、snowland-smx的安裝
pip install snowland-smx
三、snowland-smx的使用
在使用前,我們首先需要輸入python3,進入python環境
1 sm2簽名驗籤,加密解密
金鑰生成
from pysmx.SM2 import generate_keypair
pk, sk = generate_keypair()
簽名
from pysmx.SM2 import Sign
len_para = 64
sig = Sign("你好", sk, '12345678abcdef', len_para)
驗籤
from pysmx.SM2 import Verify
len_para = 64
Verify(sig, "你好", pk, len_para)
加密
from pysmx.SM2 import Encrypt e = b'20201307lcy' len_para = 64 C = Encrypt(e, pk, len_para, 0) # 此處的1代表e是否是16進位制字串
解密
from pysmx.SM2 import Decrypt
len_para = 64
m = Decrypt(C, sk, len_para)
2 sm3
國密雜湊
a. 方法1:
from pysmx.SM3 import SM3
sm3 = SM3()
sm3.update('20201307lcy')
sm3.hexdigest()
b. 方法2:
from pysmx.SM3 import hash_msg
s = '20201307lcy'
hash_msg(s)
正確性驗證:
3 sm4
國密私鑰加解密
a. 加密
from pysmx.SM4 import Sm4, ENCRYPT, DECRYPT key_data = b'1111222233334444' # 至少16位元組 sm4 = Sm4() input_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] sm4.sm4_set_key(key_data, ENCRYPT) msg = sm4.sm4_crypt_ecb(input_data)
這裡發生了報錯
Traceback (most recent call last):
File "", line 1, in
TypeError: sm4_crypt_ecb() missing 1 required positional argument: 'input_data'
我們可以初步推斷是沒有傳入input_data的原因,同時,我們去對應工程下的sm4.py看一下
發現input確實是需要大於16位,且需要是陣列格式,故改成input_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
b. 解密
from pysmx.SM4 import Sm4, ENCRYPT, DECRYPT
key_data = b'1111222233334444' # 至少16位元組
sm4 = Sm4()
sm4.sm4_set_key(key_data, DECRYPT)
sm4.sm4_crypt_ecb(msg)
四、反思與問題總結
pysmx庫的除錯屬於比較簡單的一類除錯,程式碼量少,而且均在命令列中操作。對於本次pysmx庫的除錯,在本組中我不是最先完成的,但我也在本次安裝的過程中收穫很多,就比如使用pip安裝的過程中,我與組員的安裝命令不一樣,但事實上是在我的環境下無法執行他的命令,反而用自己的命令也能夠達到要求,說明我們要在學習的過程中培養解決問題的能力。
參考連結:
https://gitee.com/snowlandltd/snowland-smx-python
https://blog.csdn.net/qsmy_an/article/details/117446575