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实现QQ游戏大家来找茬辅助工具
Sep 14 Python
使用Python开发windows GUI程序入门实例
Oct 23 Python
详细解读Python的web.py框架下的application.py模块
May 02 Python
在Django中创建第一个静态视图
Jul 15 Python
利用Python抓取行政区划码的方法
Nov 28 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
Aug 03 Python
Python使用numpy模块创建数组操作示例
Jun 20 Python
如何在Django项目中引入静态文件
Jul 26 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
python多进程(加入进程池)操作常见案例
Oct 21 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
python线性插值解析
Jul 05 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
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
js预载入和JavaScript Image()对象使用介绍
2011/08/28 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
Python 操作文件的基本方法总结
2017/08/10 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
python下载微信公众号相关文章
2019/02/26 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
python如何使用代码运行助手
2020/07/03 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
本科毕业自我鉴定
2014/03/20 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
产品售后服务承诺书
2014/05/21 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python
nginx内存池源码解析
2021/11/20 Servers
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL