支持国密算法的 Python 加密包 gmssl-python

BSD
Python 查看源码»
跨平台
2018-07-30
段洪义

GMSSL

GmSSL是一个开源的加密包的python实现,支持SM2/SM3/SM4等国密(国家商用密码)算法、项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用。

安装

pip install gmssl

SM2算法

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. encryptdecrypt

#数据和加密后数据为bytes类型
data = b"111"
enc_data = sm2_crypt.encrypt(data)
dec_data =sm2_crypt.decrypt(enc_data)
assert dec_data == data

3. signverify

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_ecb、 encrypt_cbc、 decrypt_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_ecbdecrypt_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_cbcdecrypt_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
的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

Python 学习线路图

Python 学习线路图 PyCharm教程 Pycharm介绍 Pycharm安装 Pycharm了解基础知识 Pycharm 快捷键 Pycharm快捷方式 Pycharm Omni Pycharm Macros Pycharm Micros Pycharm改进和编写代码 Pychar...

2018/10/10 17:33
1.4K
2
python 语言

Python 学习资料汇总

2014/10/25 11:28
194
0
Python天天美味(总)

Python Eat me! Python天天美味,每天一口,乐在其中,悠哉,悠哉~~ - CoderZh Python 天天美味(1) - 交换变量 Python 天天美味(2) - 字符遍历的艺术 Python 天天美味(3) - 字符转换 Python...

2014/07/28 11:32
35
0
国密算法SM2/3/4实现

# 相关信息 ## 国家密码管理局发布的标准 - SM2:http://www.oscca.gov.cn/News/201012/News_1197.htm - SM3:http://www.oscca.gov.cn/News/201012/News_1199.htm - SM4的没找到 ## 开源实现...

2016/11/24 10:22
5.3K
1
当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)

由于历史原因,Python有两个大的版本分支,Python2和Python3,又由于一些库只支持某个版本分支,所以需要在电脑上同时安装Python2和Python3,因此如何让两个版本的Python兼容,如何让脚本在对...

2019/07/02 12:29
188
0
学习python的书籍大全

现在学习Python的人越来越多,无论是自学还是跟老师学习,书是必不可少的,在这里,向大家推荐一些学习python的书籍,希望对大家有帮助 ! 如果发现新的相关的电子书,会及时更新的,收藏本文...

2019/06/10 15:06
991
0
Python300篇电子书免费送

版权声明:猪哥原创,未经同意,请勿转载! https://blog.csdn.net/u014044812/article/details/87937319 此电子书集合由猪哥整理,免费发布于微信公众号:裸睡的猪。 此电子书集合将持续更新...

2019/03/29 19:55
790
0
Python经典资料汇总80个下载目录-Python典藏

Python经典资料汇总80个下载目录-Python典藏 80个Python资料,分享给Python开发的同学。内容包括1个Python专题、66个学习资料、7套Python源码和6个相关软件。附件较多,无法一一分享,在此大...

2015/05/30 00:06
224
1
Python: Monitoring a Directory

Basic mtime + checksum + directory traversal Code #!/usr/bin/env python ''' monitor a directory print the changed files in the directory strategy: mtime + checksum ''' import ...

2012/08/30 12:44
141
0
教为学:python学习之路(一):python源码安装

教为学:python学习之路(一):python源码安装 前言 Python是一门万金油语言,特别在Linux下。一般的Linux系统也自带Python。不过,我们依旧有必要学习怎么在Linux下安装Python。 操作系统的...

2014/09/02 11:42
32
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部