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解析文件示例
Jan 23 Python
使用python分析git log日志示例
Feb 27 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
Aug 23 Python
使用Pyhton集合set()实现成果查漏的例子
Nov 24 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
浅谈Python中的生成器和迭代器
Jun 19 Python
详解python对象之间的交互
Sep 29 Python
python 实时调取摄像头的示例代码
Nov 25 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
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
PHP Error与Logging函数的深入理解
2013/06/03 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
php内嵌函数用法实例
2015/03/20 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
python中关于日期时间处理的问答集锦
2013/03/08 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
英文版银行求职信
2013/10/09 职场文书
银行优秀员工事迹
2014/02/06 职场文书
快餐公司创业计划书
2014/04/29 职场文书
外出考察学习心得体会
2016/01/18 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android