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自定义函数的创建、调用和函数的参数详解
Mar 11 Python
Python 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
在Python的Django框架中生成CSV文件的方法
Jul 22 Python
Python list操作用法总结
Nov 10 Python
python 基础教程之Map使用方法
Jan 17 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
python实现代码统计器
Sep 19 Python
pymysql的简单封装代码实例
Jan 08 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
深入理解Python变量的数据类型和存储
Feb 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
NOT NULL 和NULL
2007/01/15 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
PHP下判断网址是否有效的代码
2011/10/08 PHP
php 注释规范
2012/03/29 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
简介Django框架中可使用的各类缓存
2015/07/23 Python
django加载本地html的方法
2018/05/27 Python
python解决字符串倒序输出的问题
2018/06/25 Python
python感知机实现代码
2019/01/18 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
阿拉伯世界最大的电子商务网站:Souq沙特阿拉伯
2016/10/28 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
社区服务活动总结
2014/05/07 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
MySQL 数据类型选择原则
2021/05/27 MySQL
vue修饰符.capture和.self的区别
2022/04/22 Vue.js