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 时间处理datetime实例
Sep 06 Python
python模块之StringIO使用示例
Apr 08 Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
使用python 和 lint 删除项目无用资源的方法
Dec 20 Python
Python带动态参数功能的sqlite工具类
May 26 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
wxPython修改文本框颜色过程解析
Feb 14 Python
python中uuid模块实例浅析
Dec 29 Python
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 Python
Python+DeOldify实现老照片上色功能
Jun 21 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
php禁用cookie后session设置方法分析
2016/10/19 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
React 组件转 Vue 组件的命令写法
2018/02/28 Javascript
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
2018/05/15 NodeJs
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
Python中一般处理中文的几种方法
2019/03/06 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
高级电工工作职责
2013/11/21 职场文书
个人优缺点自我评价
2014/01/27 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python