python实现sm2和sm4国密(国家商用密码)算法的示例


Posted in Python onSeptember 26, 2020

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 实现国家商用密码算法的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python使用random和tertools模块解一些经典概率问题
Jan 28 Python
Python中的hypot()方法使用简介
May 18 Python
Python文件与文件夹常见基本操作总结
Sep 19 Python
Python控制多进程与多线程并发数总结
Oct 26 Python
Python迭代器和生成器定义与用法示例
Feb 10 Python
python获取本机所有IP地址的方法
Dec 26 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
Jan 11 Python
用python批量移动文件
Jan 14 Python
python实现录制全屏和选择区域录屏功能
Feb 05 Python
Python爬取股票信息,并可视化数据的示例
Sep 26 #Python
如何利用python发送邮件
Sep 26 #Python
Python 测试框架unittest和pytest的优劣
Sep 26 #Python
浅析python函数式编程
Sep 26 #Python
python用Configobj模块读取配置文件
Sep 26 #Python
Python内存泄漏和内存溢出的解决方案
Sep 26 #Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 #Python
You might like
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
php连接mysql数据库
2017/03/21 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
Python中super()函数简介及用法分享
2016/07/11 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
python数字图像处理之高级滤波代码详解
2017/11/23 Python
python 实现A*算法的示例代码
2018/08/13 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
Pytorch之contiguous的用法
2019/12/31 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
Python如何将模块打包并发布
2020/08/30 Python
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2016/02/09 面试题
会计职业生涯规划范文
2014/01/04 职场文书
村委会贫困证明
2014/01/14 职场文书
学生安全责任书
2014/04/15 职场文书
我爱读书演讲稿
2014/05/07 职场文书
初中教师业务学习材料
2014/05/12 职场文书
大学国际贸易专业自荐信
2014/06/05 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书