日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GMSSL

發(fā)布時(shí)間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GMSSL 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GmSSL是一個(gè)開源的加密包的python實(shí)現(xiàn),支持SM2/SM3/SM4等國(guó)密(國(guó)家商用密碼)算法、項(xiàng)目采用對(duì)商業(yè)應(yīng)用友好的類BSD開源許可證,開源且可以用于閉源的商業(yè)應(yīng)用。

安裝

pip install gmssl

SM2算法

RSA算法的危機(jī)在于其存在亞指數(shù)算法,對(duì)ECC算法而言一般沒有亞指數(shù)攻擊算法 SM2橢圓曲線公鑰密碼算法:我國(guó)自主知識(shí)產(chǎn)權(quán)的商用密碼算法,是ECC(Elliptic Curve Cryptosystem)算法的一種,基于橢圓曲線離散對(duì)數(shù)問題,計(jì)算復(fù)雜度是指數(shù)級(jí),求解難度較大,同等安全程度要求下,橢圓曲線密碼較其他公鑰算法所需密鑰長(zhǎng)度小很多。

gmssl是包含國(guó)密SM2算法的Python實(shí)現(xiàn), 提供了?encrypt、?decrypt等函數(shù)用于加密解密, 用法如下:

1. 初始化CryptSM2

import base64 import binascii from gmssl import sm2, func #16進(jìn)制的公鑰和私鑰 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進(jìn)制 assert sm2_crypt.verify(sign, data) # 16進(jìn)制

4.?sign_with_sm3和verify_with_sm3

data = b"111" # bytes類型 sign = sm2_crypt.sign_with_sm3(data) # 16進(jìn)制 assert sm2_crypt.verify_with_sm3(sign, data) # 16進(jìn)制

SM4算法

國(guó)密SM4(無線局域網(wǎng)SMS4)算法, 一個(gè)分組算法, 分組長(zhǎng)度為128bit, 密鑰長(zhǎng)度為128bit, 算法具體內(nèi)容參照SM4算法。

gmssl是包含國(guó)密SM4算法的Python實(shí)現(xiàn), 提供了?encrypt_ecb、?decrypt_ecb、?encrypt_cbc、?decrypt_cbc等函數(shù)用于加密解密, 用法如下:

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

總結(jié)

以上是生活随笔為你收集整理的GMSSL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。