python實現(xiàn)sm2和sm4國密(國家商用密碼)算法的示例
GMSSL模塊介紹
GmSSL是一個開源的加密包的python實現(xiàn),支持SM2/SM3/SM4等國密(國家商用密碼)算法、項目采用對商業(yè)應用友好的類BSD開源許可證,開源且可以用于閉源的商業(yè)應用。
安裝模塊
pip install gmssl
https://github.com/duanhongyi/gmssl/blob/master/README.md官方文檔
SM2算法
RSA算法的危機在于其存在亞指數(shù)算法,對ECC算法而言一般沒有亞指數(shù)攻擊算法 SM2橢圓曲線公鑰密碼算法:我國自主知識產(chǎn)權(quán)的商用密碼算法,是ECC(Elliptic Curve Cryptosystem)算法的一種,基于橢圓曲線離散對數(shù)問題,計算復雜度是指數(shù)級,求解難度較大,同等安全程度要求下,橢圓曲線密碼較其他公鑰算法所需密鑰長度小很多。
gmssl是包含國密SM2算法的Python實現(xiàn), 提供了 encrypt、 decrypt等函數(shù)用于加密解密, 用法如下:
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
#數(shù)據(jù)和加密后數(shù)據(jù)為bytes類型 data = b"111" enc_data = sm2_crypt.encrypt(data) dec_data =sm2_crypt.decrypt(enc_data) assert dec_data == data
3. 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進制
SM4算法
國密SM4(無線局域網(wǎng)SMS4)算法, 一個分組算法, 分組長度為128bit, 密鑰長度為128bit, 算法具體內(nèi)容參照SM4算法。
gmssl是包含國密SM4算法的Python實現(xiàn), 提供了 encrypt_ecb、 decrypt_ecb、 encrypt_cbc、 decrypt_cbc等函數(shù)用于加密解密, 用法如下:
1. 初始化CryptSM4
from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT key = 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_value
3. 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
以上就是python實現(xiàn)sm2和sm4國密(國家商用密碼)算法的示例的詳細內(nèi)容,更多關于python 實現(xiàn)國家商用密碼算法的資料請關注腳本之家其它相關文章!
相關文章
Python + selenium + requests實現(xiàn)12306全自動搶票及驗證碼破解加自動點擊功能
這篇文章主要介紹了Python + selenium + requests實現(xiàn)12306全自動搶票及驗證碼破解加自動點擊功能,需要的朋友可以參考下2018-11-11
Python 數(shù)據(jù)結(jié)構(gòu)之十大經(jīng)典排序算法一文通關
排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存2021-10-10
python實現(xiàn)對excel表中的某列數(shù)據(jù)進行排序的代碼示例
這篇文章主要給大家介紹了如何使用python實現(xiàn)對excel表中的某列數(shù)據(jù)進行排序,文中有相關的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下2023-11-11
構(gòu)建可視化?web的?Python?神器streamlit
這篇文章主要介紹了構(gòu)建可視化web的Python神器streamlit,Streamlit是一個用于機器學習、數(shù)據(jù)可視化的Python框架,它能幾行代碼就構(gòu)建出一個精美的在線app應用2022-06-06

