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错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 Python
Python import自定义模块方法
Feb 12 Python
python轻松实现代码编码格式转换
Mar 26 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 Python
使用python爬虫获取黄金价格的核心代码
Jun 13 Python
django settings.py 配置文件及介绍
Jul 15 Python
基于Python生成个性二维码过程详解
Mar 05 Python
Python异常处理机制结构实例解析
Jul 23 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 Python
Django REST framework 限流功能的使用
Jun 24 Python
基于Python实现nc批量转tif格式
Aug 14 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的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
php ci框架验证码实例分析
2013/06/26 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
Document 对象的常用方法
2009/07/31 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
用Python读取几十万行文本数据
2018/12/24 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
python给微信好友定时推送消息的示例
2019/02/20 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
快递业务员岗位职责
2014/01/06 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
法律意见书范本
2015/06/04 职场文书
Python Matplotlib库实现画局部图
2021/11/17 Python
Java详细解析==和equals的区别
2022/04/07 Java/Android