Pyhon模块之pysm4

介绍

pysm4是国密SM4算法的Python实现,能实现sm4算法的正向或者逆向过程

安装教程

一.在GitHub上下载相关文件

yang3yen/pysm4

二.将下载文件解压到任意位置
在这里插入图片描述

三.打开cmd,进入到指定文件夹目录下,并输入如下指令:

python setup.py install
#实测python3.9可以使用

如果不出意外的话,当然,一般会出意外。意外如下:
在这里插入图片描述
部分解决方案:

1.在打开方式后面补加:encoding=‘utf-8’
在这里插入图片描述
添加后,保存
在这里插入图片描述

2.将相关文件内容删除,或者将其移动到另外一个文件中(不做演示)

之后再次执行指令,一般情况下应该不会出现其他问题,如果有问题,可以查看一下python版本等。

成功后部分截图:
在这里插入图片描述
至此,pysm4安装完成。

使用

可以参考下载文件夹中的README.md文件,里面有完整讲解。
(以下使用内容讲解均来自README.md)
pysm4提供了encryptdecryptencrypt_ecbdecrypt_ecbencrypt_cbcdecrypt_cbc等函数用于加密解密(对应SM4算法的几种模式),用法如下:

encrypt和decrypt

>>> from pysm4 import encrypt, decrypt
# 明文
>>> clear_num = 0x0123456789abcdeffedcba9876543210
# 密钥
>>> mk = 0x0123456789abcdeffedcba9876543210
# 加密
>>> cipher_num = encrypt(clear_num, mk)
>>> hex(cipher_num)[2:].replace('L', '')
'681edf34d206965e86b3e94f536e4246'
# 解密
>>> clear_num == decrypt(cipher_num, mk)
True

encrypt_ecb和decrypt_ecb

>>> from pysm4 import encrypt_ecb, decrypt_ecb
# 明文
>>> plain_text = 'pysm4是国密SM4算法的Python实现'
# 密钥
>>> key = 'hello, world!'  # 密钥长度小于等于16字节
# 加密
>>> cipher_text = encrypt_ecb(plain_text, key)
>>> cipher_text
'ng3L4ldgvsZciAgx3LhplDvIzrd0+GXiNqNmd1VW0YOlwo+ojtpownOCbnxbq/3y'
# 解密
>>> plain_text == decrypt_ecb(cipher_text, key)
True

encrypt_cbc和decrypt_cbc

>>> from pysm4 import encrypt_cbc, decrypt_cbc
# 明文
>>> plain_text = 'pysm4是国密SM4算法的Python实现'
# 密钥
>>> key = 'hello, world!'  # 密钥 长度小于等于16字节
# 初始化向量
>>> iv = '11111111'        # 初始化向量  长度小于等于16字节
# 加密
>>> cipher_text = encrypt_cbc(plain_text, key, iv)
'cTsdKRSH2FqIJf22NHMjX5ZFHghR4ZtJ10wbNwj2//bJSElBXVeMtFycjdlVKP15'
# 解密
>>> plain_text == decrypt_cbc(cipher_text, key, iv)
True

pysm4实现了分组密码工作模式中的ECB(电子密码本)和CBC(密码块链接)模式

实际运用

2019_安洵杯_crakeMe
前面参考其他师傅的wp或者官方wp,这里仅给出运用pysm4步骤:

from pysm4 import encrypt, decrypt
import binascii
cipher_num = 0x59d095290df2400614f48d276906874e  #密文==>十六进制表示
mk = 0x77686572655f6172655f755f6e6f773f			 #密钥同上
clear_num = decrypt(cipher_num, mk) 
strflag = hex(clear_num).replace("0x","")
print("flag{"+str(binascii.a2b_hex(strflag),'utf-8')+"}")

#answer:
flag{SM4foRExcepioN?!}

2019_安洵杯_crakeMe
可以直接在buuctf查找,也可以通过如下连接获取题目复现:
https://pan.baidu.com/s/12axds0-IBmwp7iazCfND5w
提取码(如果需要的话): Myuy

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值