snowland-smx密码算法库
snowland-smx密码算法库
一、snowland-smx密码算法库的介绍
snowland-smx是python实现的国密套件,对标python实现的gmssl,包含国密SM2,SM3,SM4,SM9,ZUC等。其代码实现效率上优于gmssl,接口设计上也更加人性化,目前被snowland-djangohelper等项目使用。
引用于:https://zhuanlan.zhihu.com/p/347417866
二、snowland-smx的安装
pip install snowland-smx

三、snowland-smx的使用
在使用前,我们首先需要输入python3,进入python环境
1 sm2签名验签,加密解密
密钥生成
from pysmx.SM2 import generate_keypair
pk, sk = generate_keypair()
签名
from pysmx.SM2 import Sign
len_para = 64
sig = Sign("你好", sk, '12345678abcdef', len_para)
验签
from pysmx.SM2 import Verify
len_para = 64
Verify(sig, "你好", pk, len_para)

加密
from pysmx.SM2 import Encrypt
e = b'20201307lcy'
len_para = 64
C = Encrypt(e, pk, len_para, 0) # 此处的1代表e是否是16进制字符串
解密
from pysmx.SM2 import Decrypt
len_para = 64
m = Decrypt(C, sk, len_para)

2 sm3
国密哈希
a. 方法1:
from pysmx.SM3 import SM3
sm3 = SM3()
sm3.update('20201307lcy')
sm3.hexdigest()

b. 方法2:
from pysmx.SM3 import hash_msg
s = '20201307lcy'
hash_msg(s)

正确性验证:

3 sm4
国密私钥加解密
a. 加密
from pysmx.SM4 import Sm4, ENCRYPT, DECRYPT
key_data = b'1111222233334444' # 至少16字节
sm4 = Sm4()
input_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
sm4.sm4_set_key(key_data, ENCRYPT)
msg = sm4.sm4_crypt_ecb(input_data)
这里发生了报错
Traceback (most recent call last):
File "", line 1, in
TypeError: sm4_crypt_ecb() missing 1 required positional argument: 'input_data'
我们可以初步推断是没有传入input_data的原因,同时,我们去对应工程下的sm4.py看一下

发现input确实是需要大于16位,且需要是数组格式,故改成input_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

b. 解密
from pysmx.SM4 import Sm4, ENCRYPT, DECRYPT
key_data = b'1111222233334444' # 至少16字节
sm4 = Sm4()
sm4.sm4_set_key(key_data, DECRYPT)
sm4.sm4_crypt_ecb(msg)

四、反思与问题总结
pysmx库的调试属于比较简单的一类调试,代码量少,而且均在命令行中操作。对于本次pysmx库的调试,在本组中我不是最先完成的,但我也在本次安装的过程中收获很多,就比如使用pip安装的过程中,我与组员的安装命令不一样,但事实上是在我的环境下无法运行他的命令,反而用自己的命令也能够达到要求,说明我们要在学习的过程中培养解决问题的能力。
参考链接:
https://gitee.com/snowlandltd/snowland-smx-python
https://blog.csdn.net/qsmy_an/article/details/117446575
snowland-smx密码算法库的更多相关文章
- OpenSSL密码算法库: MD5示例小程序
OpenSSL http://www.openssl.org/ OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL 的密码算法库包含多种加密算 ...
- liboqs-量子安全密码算法开源C库
liboqs是一个用于量子安全密码算法的开源C库. 一,概述 liboqs提供: 量子安全 密钥封装机制(KEM)和数字签名算法的开源实现的集合: 这些算法的通用API: 测试工具和基准测试例程. l ...
- Android逆向之旅---Android中锁屏密码算法解析以及破解方案
一.前言 最近玩王者荣耀,下载了一个辅助样本,结果被锁机了,当然破解它很简单,这个后面会详细分析这个样本,但是因为这个样本引发出的欲望就是解析Android中锁屏密码算法,然后用一种高效的方式制作锁机 ...
- Java实现7种常见密码算法
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 前面在密码学入门一文中讲解了各种常见的密码学概念.算法与运用场景,但没有介绍过代码,因此,为作补充,这一篇将会介绍 ...
- 信息安全-2:python之hill密码算法[原创]
转发注明出处:http://www.cnblogs.com/0zcl/p/6106513.html 前言: hill密码算法我打算简要介绍就好,加密矩阵我用教材上的3*3矩阵,只做了加密,解密没有做, ...
- 安装Python算法库
安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...
- scikit-learn 支持向量机算法库使用小结
之前通过一个系列对支持向量机(以下简称SVM)算法的原理做了一个总结,本文从实践的角度对scikit-learn SVM算法库的使用做一个小结.scikit-learn SVM算法库封装了libsvm ...
- scikit-learn 线性回归算法库小结
scikit-learn对于线性回归提供了比较多的类库,这些类库都可以用来做线性回归分析,本文就对这些类库的使用做一个总结,重点讲述这些线性回归算法库的不同和各自的使用场景. 线性回归的目的是要得到输 ...
- 算法库:Matlab与C++混合编程
算法库:Matlab与C++混合编程 最近做光流算法预演过程中,下载的源码中涉及到了Matlab和C++的混合编程.在同事Matlab2014的环境下,程序到是一下就运行通过了.但在我这Matlab2 ...
- 使用CPA4破解经典密码算法
下面是一段经过经典密码算法加密的密文(加密算法未知): yvvnerujjvnywhbdvkpchfgvjtzwqsuporqfzpoekkjgziicdwwkeejdsruef whwseyej ...
随机推荐
- before-after-hook钩子函数
before-after-hook 最近看别人的代码,接触到一个插件,before-after-hook,百度搜一圈也没有看到什么地方有教程,看这个字面意思是一个hook,和axios里面的拦截器,v ...
- 二阶段目标检测网络-FPN 详解
论文背景 引言(Introduction) 特征金字塔网络 FPN FPN网络建立 Anchor锚框生成规则 实验 代码解读 参考资料 本篇文章是论文阅读笔记和网络理解心得总结而来,部分资料和图参考论 ...
- 软件工程大作业——“你帮我助”软件开发v2.0
项目简介 在疫情管控期间,很多物资由于信息不对称,不能达成资源的有效分配,尽管这样的事件已经基本不会在新冠疫情的场景中出现,但是开发出一个物品交换的公开信息平台在任何一个社区中都是有必要的,这是构建完 ...
- Django之ORM表高级操作、增删改查、外键字段连表查、单表查、跨表查、F/Q查询
目录 一.如何开启自己的测试脚本? 二.对表数据的添加.更新.删除 1.create() 变态操作之批量插入数据 2.update() 3.delete() 4.如何查看QuerySet对象执行的sq ...
- Hadoop详解(08) - Hadoop企业优化方案.docx
Hadoop详解(08) - Hadoop企业优化方案.docx MapReduce优化 MapReduce 跑的慢的原因 计算机性能:CPU.内存.磁盘健康.网络 I/O 操作优化 (1)数据倾斜 ...
- 华为运动健康服务Health Kit 6.9.0版本新增功能揭秘!
华为运动健康服务(HUAWEI Health Kit)6.9.0版本新鲜出炉啦! 一文了解新增功能,快来一起加入Health Kit生态大家庭! 一.更丰富:睡眠呼吸记录健康数据开放 呼吸机是用于为患 ...
- 解决使用linux部署nodejs服务测试代码返回中文是乱码
今天写了个简单的node.js文件 代码如下 var http = require('http'); http.createServer(function (request, response) { ...
- JAVA虚拟机05-内存溢出示例(jdk1.8)
1.JAVA虚拟机堆内存溢出OutOfMemoryError 1.1设置参数 -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError 最小堆的大小20m 最大堆 ...
- 使用vscode调试ros
https://blog.csdn.net/u012254599/article/details/106143540/ CMakeLists.txt set(CMAKE_BUILD_TYPE &quo ...
- UEFI引导安装UBUNUT
1.引导方式一定要选UEFI,否则一些显卡驱动将不能安装 2.安装的时候,要在第四个界面,也就是选择覆盖安装还是保留双系统的那个界面,选择其他,一定要自己分区 3.分区: 4.一共5个重要分区: 1. ...