首页 > 编程语言 >snowland-smx密码算法库

snowland-smx密码算法库

时间:2022-12-10 20:55:15浏览次数:56  
标签:pysmx smx snowland sm4 算法 import data

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

标签:pysmx,smx,snowland,sm4,算法,import,data
From: https://www.cnblogs.com/yu15141310373/p/16972178.html

相关文章

  • KM算法模板
    P3967[TJOI2014]匹配时间复杂度是n3#include<bits/stdc++.h>usingnamespacestd;usingpii=pair<int,int>;#definefifirst#definesesecondconstintM=105;......
  • Dijkstra 算法说明与实现
    Dijkstra算法说明与实现作者:Grey原文地址:博客园:Dijkstra算法说明与实现CSDN:Dijkstra算法说明与实现问题描述问题:给定出发点,出发点到所有点的距离之和最小是多少?......
  • [2022-12-06]神经网络与深度学习hw11 - 各种优化算法比较
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 地下城地图图块生成算法
    一.概述生成地下城,包含房间和迷宫通路。类似:示例效果一示例效果二二.思路1.生成迷宫通路从房间的边缘坐标XY为奇数的格子生成迷宫,确保房间和迷宫通路之间有......
  • openssl国密算法库
    openssl国密算法库一、开发背景openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘......
  • 算法图解笔记
    编写递归函数时,必须告诉它何时停止,因此,每个递归函数有两个部分:基线条件(basecase)和递归条件(recursivecase)。递归条件指的是函数调用自己,而基线条件则指的是......
  • 每日算法之最小的K个数
    JZ40最小的K个数描述给定一个长度为n的可能有重复值的数组,找出其中不去重的最小的k个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺......
  • 贪心算法_划分字母区间
    '字符串S由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。'示例:'输入:s="abab......
  • C/C++《程序设计与算法综合实践》备选题目
    C/C++《程序设计与算法综合实践》备选题目《程序设计与算法综合实践》期末大作业题目及评分标准有如下情况之一者,为不及格。(1)未能完成所选题目评分标准的最低要求。(2)......
  • 算法导入
    一、算法分类:服务算法任务算法二、获取方法:http://docs.scu.baidu-int.com/scu-group/CVS/%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97/%E8%A7%86%E8%A7%89V2.8/%E5%9F......