gmssl
功能说明
描述
GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法、SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具,可以用于构建PKI/CA、安全通信、数据加密等符合国密标准的安全应用。
GmSSL项目是OpenSSL项目的分支,并与OpenSSL保持接口兼容。因此GmSSL可以替代应用中的OpenSSL组件,并使应用自动具备基于国密的安全能力。
GmSSL项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用。
- SM2:基于椭圆曲线密码(ECC)的公钥密码算法标准,提供数字签名,密钥交换,公钥加密,用于替换 RSA/ECDSA/ECDH 等国际算法
- SM3:消息摘要算法,哈希结果为 256 位,用于替换 MD5/SHA1/SHA256 等国际算法
- SM4:对称加密算法,密钥长度和分组长度均为 128 位,主要用于无线局域网标准,用于替换 DES/AES 等算法
函数原型
sm2
# sm2对象构造函数
# public_key:公钥字符串
# private_key:私钥字符串,
# ecc_table:ecc加密算法离散表,默认可不填
CryptSM2(public_key=public_key, private_key=private_key, ecc_table=default_ecc_table)
# sm2加密函数
# data:待加密字符串
encrypt(data)
# sm2解密函数
# data:待解密字符串
decrypt(data)
sm3
# sm3哈希函数
# bytesList:字节列表字符串, 通过gmss库自带的函数bytes_to_list转化而来
sm3_hash(bytesList)
sm4
# sm4对象构造函数
CryptSM4()
# sm4设置加密key
# key:16位长度的字符串
# mode:默认为SM4_ENCRYPT(0)表示加密, SM4_DECRYPT(1)表示解密
set_key(key,mode)
# sm4加解密函数, 根据set_key设置mode的不同执行加/解密
# byteStr:字节字符串
crypt_ecb(byteStr)
示例
# SM2加密
def sm2_encrypt(public_key,private_key,plain_text):
sm2_crypt = sm2.CryptSM2(public_key=public_key, private_key=private_key)
encrypt_value = sm2_crypt.encrypt(plain_text.encode(encoding="utf-8"))
cipher_text = base64.b64encode(encrypt_value)
return cipher_text
# SM2解密
def sm2_decrypt(public_key,private_key,cipher_text):
byt_cipher_text = base64.b64decode(cipher_text)
sm2_crypt = sm2.CryptSM2(public_key=public_key, private_key=private_key)
decrypt_value = sm2_crypt.decrypt(byt_cipher_text).decode(encoding="utf-8")
return decrypt_value
# SM3
def sm3_hash(data):
return gmssl.sm3.sm3_hash(func.bytes_to_list(data.encode(encoding="utf-8")))
# SM4加密
def sm4_encryptData(secret_key,plain_text):
# 创建 SM4对象
crypt_sm4 = sm4.CryptSM4()
# 设置key
crypt_sm4.set_key(secret_key, sm4.SM4_ENCRYPT)
# 调用加密方法加密(十六进制的bytes类型)
encrypt_value = crypt_sm4.crypt_ecb(plain_text.encode(encoding="utf-8"))
# print("encrypt_value: " + str(encrypt_value))
# 用base64.b64encode转码(编码后的bytes)
cipher_text = base64.b64encode(encrypt_value)
# 返回加密后的字符串
return cipher_text.decode('utf-8', 'ignore')
# SM4解密
def sm4_decryptData(secret_key,cipher_text):
# 创建 SM4对象
crypt_sm4 = sm4.CryptSM4()
# 设置key
crypt_sm4.set_key(secret_key, sm4.SM4_DECRYPT)
# 将转入参数base64.b64decode解码成十六进制的bytes类型
byt_cipher_text = base64.b64decode(cipher_text)
# 调用加密方法解密,解密后为bytes类型
decrypt_value = crypt_sm4.crypt_ecb(byt_cipher_text)
# 返回解密后的字符串
return decrypt_value.decode('utf-8', 'ignore')
def test():
ss = "abc123百数云"
# sm2
# SM2生成密钥
SM2_PRIVATE_KEY,SM2_PUBLIC_KEY = sm2utils.generatekey()
print(SM2_PRIVATE_KEY)
print(SM2_PUBLIC_KEY)
# 加解密
s1 = sm2_encrypt(SM2_PUBLIC_KEY,SM2_PRIVATE_KEY,ss)
print("sm2加密:"+str(s1))
s2 = sm2_decrypt(SM2_PUBLIC_KEY,SM2_PRIVATE_KEY,s1)
print("sm2解密:"+s2)
# sm3
s1 = sm3_hash(ss)
print("sm3_hash:"+s1)
# sm4
secret_key = '12345678abcdefgh'
s1 = sm4_encryptData(secret_key.encode(encoding="utf-8"),ss)
print("sm4加密:"+str(s1))
s2 = sm4_decryptData(secret_key.encode(encoding="utf-8"),s1)
print("sm4解密:"+str(s2))
备注
更多说明详情请参见官方文档: http://gmssl.org/docs/docindex.html
演示示例
暂无
安装包下载
暂无
相关视频
暂无