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 thread 并发且顺序运行示例
Apr 09 Python
Python 创建子进程模块subprocess详解
Apr 08 Python
Python3.2中的字符串函数学习总结
Apr 23 Python
Python处理Excel文件实例代码
Jun 20 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 Python
pandas将DataFrame的列变成行索引的方法
Apr 10 Python
python 实现倒排索引的方法
Dec 25 Python
django2笔记之路由path语法的实现
Jul 17 Python
np.dot()函数的用法详解
Jan 17 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
理解Django 中Call Stack机制的小Demo
Sep 01 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下MYSQL limit的优化
2008/01/10 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
Smarty分页实现方法完整实例
2016/05/11 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
JavaScript实现时间表动态效果
2017/07/15 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
极简的Python入门指引
2015/04/01 Python
python计算牛顿迭代多项式实例分析
2015/05/07 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
python实现彩票系统
2020/06/28 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
python实现批量注册网站用户的示例
2019/02/22 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
行政经理岗位职责
2013/11/09 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
立春观后感
2015/06/18 职场文书
陪护人员误工证明
2015/06/24 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
Java设计模式之代理模式
2022/04/22 Java/Android