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的Tornado框架的HTTP客户端的教程
Apr 24 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
python print 按逗号或空格分隔的方法
May 02 Python
python中pip的安装与使用教程
Aug 10 Python
在scrapy中使用phantomJS实现异步爬取的方法
Dec 17 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
Dec 24 Python
Python列表与元组的异同详解
Jul 02 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
Jul 04 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 Python
python文件目录操作之os模块
May 08 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
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
php curl请求信息和返回信息设置代码实例
2015/04/27 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
python实现计算倒数的方法
2015/07/11 Python
Python中单例模式总结
2018/02/20 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
职工运动会邀请函
2014/02/02 职场文书
工作过失检讨书
2014/02/23 职场文书
自行车广告词大全
2014/03/21 职场文书
购房意向书
2014/04/01 职场文书
中学生家长评语大全
2014/04/16 职场文书
班训口号大全
2014/06/18 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python