

用Python写一个超简单的加密程序
source link: https://mabbs.github.io/2022/10/08/tinyaes.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

8 October 2022 - 字数统计:1699 - 阅读大约需要5分钟 - Hits: 16
用Python写一个超简单的加密程序
by mayx
有些冷门的库也许更容易解决问题
最近在写Python脚本的时候遇到一个问题,就是怎么样轻松的加密一串字符。在网上随便一搜大都是介绍的使用比如pycryptodome或者cryptography库进行加密,我以前写的一个加密传输Demo作业的时候就用过。不过现在总感觉看着很难受,倒不是说有多复杂,主要是这些库的算法太多了,什么AES,RSA啥的都有,而且还有一堆乱七八糟的参数,我用的时候还要去思考到底用哪个算法比较好,还要考虑有些有什么向量之类乱七八糟的。但是很多时候我只是单纯要个加密,不想去考虑这些乱七八糟的东西,那我应该怎么做比较好呢?
这时候我想起来我以前用的Pyinstaller库如果想要使用Key参数的时候会要求安装一个叫做tinyaes的库,我搜了一下这个库,网上几乎没有对这个库的介绍,没办法就只好去Github找找它源代码的仓库。去看了一眼说了跟没说一样,就几句话连个示例也没有的……不过大概意思就是C也有个叫tiny-AES-c的库,它是在Python上对这个库做的一个简单的包装,但那个仓库里面也没有示例😂……还好tinyaes仓库里面有个测试脚本,我看了一眼又回去看了看C的库那个文档,结合“Same function for encrypting as for decrypting in CTR mode”这句话我才明白,这个tinyaes原来就用一个方法就能进行加解密了!怪不得叫“xcrypt”,就像xor加密那样,用同样的方法就可以做到加密和解密,这个仓库加密的算法是AES-128-CTR,这样我也不用费心考虑到底选什么加密算法了,使用也非常简单,非常的符合我的需求啊,可惜就是这个库不怎么出名,100个⭐都不到。
tinyaes的使用方法非常简单,一句话就可以搞定,而且加密和解密的代码完全一致:
__import__("tinyaes").AES(b"十六位的密码", b"十六位的向量,可以不要").CTR_xcrypt_buffer(b"需要加密/解密的内容")
使用起来非常的简单啊,就是密码要求必须是16位的……那我要是想要一个随意位数的密码怎么办呢?我想起来MD5的hash长度好像就是16位的,所以如果想要其他位数的密码就用MD5哈希之后再用吧。
既然使用方法如此简单,我估摸了一下,如果写一个加密文件的小程序估计用不了10行,用其他的加密库我估计应该做不到吧,所以说就随手写了一个试试看,果然不到10行就写了出来,看起来非常不错。
import hashlib, tinyaes, sys
if not len(sys.argv) == 3:
exit(f"Usage: {sys.argv[0]} [filepath] [key]")
key = tinyaes.AES(hashlib.md5(sys.argv[2].encode()).digest())
with open(sys.argv[1], 'rb') as orig:
with open(sys.argv[1] + ".xc", 'wb') as enc:
for byte_block in iter(lambda: orig.read(4096), b''):
enc.write(key.CTR_xcrypt_buffer(byte_block))
用法很简单,比如我给这个脚本起名叫“encrypt_file.py”,我想加密就可以直接输入python3 encrypt_file.py 要加密的文件.txt 密码
就可以了,执行完之后会生成一个“.xc”为后缀的文件,解密也一样,输入python3 encrypt_file.py 要加密的文件.txt.xc 密码
就OK了,不过因为我这个程序并不能判断一个文件有没有加密,所以解密的时候就会给后缀再加一个“.xc”,这时候就只能手动把它去掉了。如果密码不正确,那就相当于二次加密了,解密就要按顺序依次反过来执行,很有意思。
这样的库我感觉更符合Pythonic,用什么pycryptodome或者cryptography库写的就感觉像是Java程序那样臃肿,这种程序感觉就很直观,不用考虑那么多奇怪的东西。
tags: Python - 加密
Gitalking ...
Recommend
-
64
最近在学习excel表格的制作,顺便结合之前学习的内容,利用python的两个模板,分别是获取系统信息的psutil,和生成excel表格的xlsxwriter。利用这两个模板将生成一个简单的excel表格,获取当时的linux系统信息,如内存状态,磁盘状态,网卡流量等。首先psutil和xls...
-
6
四公子的剑This is my site, welcome you!一个简单的python小脚本由于自己开发用的是macBook,所有很多时候都是用终端命令行,在进行一些日常操作,前几日正好需要输入终端的某一...
-
9
Python:一个简单易用的 Python GUI 图形化界面编程框架——PySimpleGUI By: taho On: 2021年7...
-
7
测试靶机为DVWA,适合DVWA暴力破解模块的Low和Medium等级 关键代码解释 url指定url地址 url = "http://192.168.171.2/dvwa/vulnerabilities/brute/" header设置请求头
-
6
文章目录 [显示] 一、为什么从HTTP请求开始 无论我们通过浏览器打开网站、访问网页,还是通过脚本对URL网址进行访问,本质上都是对HTTP服务器的请求,浏览器上所呈现的、控制...
-
5
我的WCF之旅(1):创建一个简单的WCF程序 为了使读者对基于WCF的编...
-
6
python版本3.6, 在windows以及linux上都进行过测试 由于python中rsa加密存在长度限制, 虽然可以通过分片加密来解决,但是更好的做法是通过rsa加密传输aes密钥给服...
-
9
python构建一个简单的推荐系统 评分: 4.5 作者: Ryan Lu 类别: Python...
-
6
一个想活得简单的程序猿的2022年终总结! - 虚无境 - 博客园 今年的总结相比以往来说,可写的太少了,但看到我17年开始写的年终总结,已定下每年写下的承诺,因此即便可写的不多,但是还是写下吧,毕竟又过了一年,总...
-
7
V2EX › 程序员 开源一个简单的剪切板复制历史程序, node 编写,就 30 几行代码安全可靠
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK