介绍
pysm4是国密SM4算法的Python实现,能实现sm4算法的正向或者逆向过程
安装教程
一.在GitHub上下载相关文件
二.将下载文件解压到任意位置
三.打开cmd,进入到指定文件夹目录下,并输入如下指令:
python setup.py install
#实测python3.9可以使用
如果不出意外的话,当然,一般会出意外。意外如下:
部分解决方案:
1.在打开方式后面补加:encoding=‘utf-8’
添加后,保存
2.将相关文件内容删除,或者将其移动到另外一个文件中(不做演示)
之后再次执行指令,一般情况下应该不会出现其他问题,如果有问题,可以查看一下python版本等。
成功后部分截图:
至此,pysm4安装完成。
使用
可以参考下载文件夹中的README.md
文件,里面有完整讲解。
(以下使用内容讲解均来自README.md
)
pysm4提供了encrypt
、 decrypt
、 encrypt_ecb
、 decrypt_ecb
、 encrypt_cbc
、decrypt_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