1. 程式人生 > 程式設計 >python實現sm2和sm4國密(國家商用密碼)演算法的示例

python實現sm2和sm4國密(國家商用密碼)演算法的示例

GMSSL模組介紹

GmSSL是一個開源的加密包的python實現,支援SM2/SM3/SM4等國密(國家商用密碼)演算法、專案採用對商業應用友好的類BSD開源許可證,開源且可以用於閉源的商業應用。

安裝模組

pip install gmssl

https://github.com/duanhongyi/gmssl/blob/master/README.md官方文件

SM2演算法

RSA演算法的危機在於其存在亞指數演算法,對ECC演算法而言一般沒有亞指數攻擊演算法 SM2橢圓曲線公鑰密碼演算法:我國自主智慧財產權的商用密碼演算法,是ECC(Elliptic Curve Cryptosystem)演算法的一種,基於橢圓曲線離散對數問題,計算複雜度是指數級,求解難度較大,同等安全程度要求下,橢圓曲線密碼較其他公鑰演算法所需金鑰長度小很多。

gmssl是包含國密SM2演算法的Python實現, 提供了 encryptdecrypt等函式用於加密解密, 用法如下:

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 == 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(無線區域網SMS4)演算法, 一個分組演算法, 分組長度為128bit, 金鑰長度為128bit, 演算法具體內容參照SM4演算法。

gmssl是包含國密SM4演算法的Python實現, 提供了 encrypt_ecb decrypt_ecbencrypt_cbcdecrypt_cbc等函式用於加密解密, 用法如下:

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實現sm2和sm4國密(國家商用密碼)演算法的示例的詳細內容,更多關於python 實現國家商用密碼演算法的資料請關注我們其它相關文章!