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 19 Python
Python类的用法实例浅析
May 27 Python
Python中线程编程之threading模块的使用详解
Jun 23 Python
python实现自动登录人人网并采集信息的方法
Jun 28 Python
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
Python将list中的string批量转化成int/float的方法
Jun 26 Python
Pandas DataFrame 取一行数据会得到Series的方法
Nov 10 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
python创建学生成绩管理系统
Nov 22 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
python3 中使用urllib问题以及urllib详解
Aug 03 Python
python opencv实现简易画图板
Aug 27 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初学入门
2006/11/19 PHP
PHP array_multisort() 函数的深入解析
2013/06/20 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
javascript日期比较方法实例分析
2016/06/17 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
python的keyword模块用法实例分析
2015/06/30 Python
Python变量和数据类型详解
2017/02/15 Python
python运行其他程序的实现方法
2017/07/14 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
python执行精确的小数计算方法
2019/01/21 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
考核工作实施方案
2014/03/30 职场文书
感恩节活动策划方案
2014/05/16 职场文书
优秀应届毕业生自荐书
2014/06/29 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
死亡赔偿协议书
2015/01/28 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
春节晚会开场白
2015/05/29 职场文书
党校培训学习心得体会
2016/01/06 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang