GMSSL
GmSSL是一個開源的加密包的python實現,支持SM2/SM3/SM4等國密(國家商用密碼)算法、項目采用對商業應用友好的類BSD開源許可證,開源且可以用于閉源的商業應用。
安裝
pip install gmsslSM2算法
RSA算法的危機在于其存在亞指數算法,對ECC算法而言一般沒有亞指數攻擊算法 SM2橢圓曲線公鑰密碼算法:我國自主知識產權的商用密碼算法,是ECC(Elliptic Curve Cryptosystem)算法的一種,基于橢圓曲線離散對數問題,計算復雜度是指數級,求解難度較大,同等安全程度要求下,橢圓曲線密碼較其他公鑰算法所需密鑰長度小很多。
gmssl是包含國密SM2算法的Python實現, 提供了?encrypt、?decrypt等函數用于加密解密, 用法如下:
1. 初始化CryptSM2
import base64 import binascii from gmssl import sm2, func #16進制的公鑰和私鑰 private_key = '00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5' public_key = 'B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF331A83081A6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207' sm2_crypt = sm2.CryptSM2(public_key=public_key, private_key=private_key)2.?encrypt和decrypt
#數據和加密后數據為bytes類型 data = b"111" enc_data = sm2_crypt.encrypt(data) dec_data =sm2_crypt.decrypt(enc_data) assert dec_data == data3.?sign和verify
data = b"111" # bytes類型 random_hex_str = func.random_hex(sm2_crypt.para_len) sign = sm2_crypt.sign(data, random_hex_str) # 16進制 assert sm2_crypt.verify(sign, data) # 16進制4.?sign_with_sm3和verify_with_sm3
data = b"111" # bytes類型 sign = sm2_crypt.sign_with_sm3(data) # 16進制 assert sm2_crypt.verify_with_sm3(sign, data) # 16進制SM4算法
國密SM4(無線局域網SMS4)算法, 一個分組算法, 分組長度為128bit, 密鑰長度為128bit, 算法具體內容參照SM4算法。
gmssl是包含國密SM4算法的Python實現, 提供了?encrypt_ecb、?decrypt_ecb、?encrypt_cbc、?decrypt_cbc等函數用于加密解密, 用法如下:
1. 初始化CryptSM4
from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPTkey = b'3l5butlj26hvv313' value = b'111' # bytes類型 iv = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' # bytes類型 crypt_sm4 = CryptSM4()2.?encrypt_ecb和decrypt_ecb
crypt_sm4.set_key(key, SM4_ENCRYPT) encrypt_value = crypt_sm4.crypt_ecb(value) # bytes類型 crypt_sm4.set_key(key, SM4_DECRYPT) decrypt_value = crypt_sm4.crypt_ecb(encrypt_value) # bytes類型 assert value == decrypt_value3.?encrypt_cbc和decrypt_cbc
crypt_sm4.set_key(key, SM4_ENCRYPT) encrypt_value = crypt_sm4.crypt_cbc(iv , value) # bytes類型 crypt_sm4.set_key(key, SM4_DECRYPT) decrypt_value = crypt_sm4.crypt_cbc(iv , encrypt_value) # bytes類型 assert value == decrypt_value總結
- 上一篇: 【Makefile由浅入深完全学习记录3
- 下一篇: 二维数组的指针复习