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 相关文章推荐
django 自定义用户user模型的三种方法
Nov 18 Python
Python中函数的参数传递与可变长参数介绍
Jun 30 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
Jan 15 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
Python shutil模块用法实例分析
Oct 02 Python
python实现WebSocket服务端过程解析
Oct 18 Python
将labelme格式数据转化为标准的coco数据集格式方式
Feb 17 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 Python
Python道路车道线检测的实现
Jun 27 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
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
php之Memcache学习笔记
2013/06/17 PHP
解析coreseek for sphinx的使用
2013/06/21 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
超级强大的表单验证
2006/06/26 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
Jquery中"$(document).ready(function(){ })"函数的使用详解
2013/12/30 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
Vue中Quill富文本编辑器的使用教程
2018/09/21 Javascript
[48:41]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
python和php哪个更适合写爬虫
2020/06/22 Python
python和opencv构建运动检测器的实现
2021/03/03 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
上海天奕面试题笔试题
2015/04/19 面试题
医院护士专业个人的求职信
2013/12/09 职场文书
英语生日邀请函
2014/01/23 职场文书
幼儿园教师节活动方案
2014/02/02 职场文书
超市收银员岗位职责
2015/04/07 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python