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中无限元素列表的实现方法
Aug 18 Python
python 根据pid杀死相应进程的方法
Jan 16 Python
Scrapy的简单使用教程
Oct 24 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
Django 实现admin后台显示图片缩略图的例子
Jul 28 Python
Django之PopUp的具体实现方法
Aug 31 Python
Python3 filecmp模块测试比较文件原理解析
Mar 23 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
python中tab键是什么意思
Jun 18 Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
Jun 13 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
Destoon实现多表查询示例
2014/08/21 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
jQuery:delegate中select()不起作用的解决方法(实例讲解)
2014/01/26 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
学习jQuery中的noConflict()用法
2018/09/28 jQuery
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
django加载本地html的方法
2018/05/27 Python
python微信撤回监测代码
2019/04/29 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
如何高效率的查找一个月以内的数据
2012/04/15 面试题
软件测试面试题
2014/01/05 面试题
党校自我鉴定范文
2013/10/02 职场文书
公司领导推荐信
2013/11/12 职场文书
高中军训感言1000字
2014/03/01 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
艺术节主持词
2014/04/02 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
技术负责人任命书
2014/06/05 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
2014年电教工作总结
2014/12/19 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
利用python实时刷新基金估值(摸鱼小工具)
2021/09/15 Python