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构造函数及解构函数介绍
Feb 26 Python
详细介绍Ruby中的正则表达式
Apr 10 Python
python网络爬虫学习笔记(1)
Apr 09 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
Python3离线安装Requests模块问题
Oct 13 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 Python
再谈python_tkinter弹出对话框创建
Mar 20 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开发工具及资源收藏
2007/01/02 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
php接口和抽象类使用示例详解
2014/03/02 PHP
php中namespace use用法实例分析
2016/01/22 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
广告显示判断
2006/08/31 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
JSON相关知识汇总
2015/07/03 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
python实现获取序列中最小的几个元素
2014/09/25 Python
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
详解python进行mp3格式判断
2016/12/23 Python
Python探索之SocketServer详解
2017/10/28 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
大学生求职工作的自我评价
2014/02/13 职场文书
公共场所标语
2014/06/30 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
公安机关起诉意见书
2015/05/20 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js