栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

基于python制作的文件加密解密器(无需任何算法基础,有手就行)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于python制作的文件加密解密器(无需任何算法基础,有手就行)

前言

记得那是一个下午,我无聊地浏览着电脑,玩着pycharm,随手在插件搜索栏里随手搜了一些东西,然后我迷迷糊糊地就装了这个库Fernet,我也不知道这个库是干什么地,网上也没有关于这个库地任何资料,但是我用的是pycharm,我装的那些库都有基本语法介绍的,然后我把pycharm关于这个库的介绍复制到百度翻译上去寻找翻译,然后慢慢摸索,我就发现了这个库的神奇了,这些下面具体再讲,就是这么神奇的经历哈哈哈哈。

正文

okok正式开始工作
在我的上一篇博客中,我详细地介绍了这个库的安装教程,不会的可以看上一篇,也可以私信问我。我们剖析一下Fernet的函数吧

基本函数

下面展示一些 基本函数。

generate_key函数

先讲这个generate_key函数吧

fernet.Fernet.generate_key()	

这个函数是生成一个密钥,我们可以把这个密钥赋值给一个变量
例如:

key = fernet.Fernet.generate_key()
print(key)

我们所返回的结果是这样子的:zY3GonZRjThl1N4DhbdI1rH6zqkOVaD46tek-icLxLM=
这就是我们要的密钥了,解密时就必须要用到它。
————————————————————分界线————————————————————

encrypt函数

我们再来讲下一个函数encrypt

fernet.Fernet(key).encrypt(contents)

这个函数的意思是
利用key变量里面的值,对contents里面的值进行加密。
最后的结果也可以把它赋值给一个变量。
例如:

contents_encrypted = fernet.Fernet(key).encrypt(contents)
with open(file, "wb") as thefile:
    thefile.write(contents_encrypted)

这几段程序的意思是,把我们加密后的结果先赋值给contents_encrypted这个变量,然后再把这个值写入文件里(这个file其实是一个变量,它的上面是一个for循环)。
这就是加密的全过程了,是不是很简单,我说过的,不需要任何的算法基础,可以加密任何类型的文件。是不是很方便。
————————————————————分界线————————————————————

decrypt函数

讲完了加密函数,那就来讲解密函数decrypt吧

fernet.Fernet(rightkey).decrypt(contents)

这个函数的意思是:利用rightkey变量里的值作为密钥,解出contents里的值。
同样,我们把它返回的结果赋值给一个变量,它的结果就是解密后的文件源码了。
例如

contents_decrypted = fernet.Fernet(rightkey).decrypt(contents)
with open(file, "wb") as thefile:
	thefile.write(contents_decrypted)

这几段话的意思是先获取到解密后的文件源码,再把获得的文件的源码,重新写入到文件夹里,就是直接覆盖掉加密的文件。

主程序

在上一节,我已经讲完了Fernet的基本函数,就不多说了吧,上主程序代码:

加密程序源代码
import fernet
import os

files = []
for file in os.listdir():
    if file == "加密.py" or file == "thekey.key" or file == "解密.py" or file == "加密.exe" or file == "解密.exe":	#排除“自己人”
        continue
    if os.path.isfile(file):
        files.append(file)				#获取该路径下文件的list列表
print(files)
key = fernet.Fernet.generate_key()
with open("thekey.key", "wb") as thekey:
    thekey.write(key)
for file in files:
    with open(file, "rb") as thefile:
        contents = thefile.read()
        contents_encrypted = fernet.Fernet(key).encrypt(contents)
with open(file, "wb") as thefile:
    thefile.write(contents_encrypted)		#覆盖掉源文件

这是加密文件的代码

解密程序源代码
import fernet
import os

files = []
for file in os.listdir():
    if file == "加密.py" or file == "thekey.key" or file == "解密.py" or file == "加密.exe" or file == "解密.exe":
        continue
    if os.path.isfile(file):
        files.append(file)
with open("thekey.key", "rb") as key:
    rightkey = key.read()
a = "luck安"
b = input("请输入正确的口令:n")
if a == b:
    for file in files:
        with open(file, "rb") as thefile:
            contents = thefile.read()
        contents_decrypted = fernet.Fernet(rightkey).decrypt(contents)
        with open(file, "wb") as thefile:
            thefile.write(contents_decrypted)
        print("恭喜,你的文件已成功解锁")
else:
    print("口令出错")

ps.我们真实去解密码时,所需要的仅仅是那个口令:luck安,我们只需要输入这个口令,程序就会自动为我们解密文件。但是,你的文件夹里必须要有那个thekey.key文件,如果没有,程序就会报错。

程序运行截图


我然后运行加密文件
目标文件截图
可以看到,目标文件已经成了一篇乱码。
然后我再运行解密程序
这是cmd窗口

而源文件恢复正常

结语

这是一次利用python的第三方库进行编程的很好的例子。python的核心就是在于它的开源,也是众多人青睐python的重要原因。
我也想过说把它导出exe文件,我尝试用了py2exe来把它转换成exe文件。大概20多mb,还好,但是我运行是却闪退,希望有大佬可以指点迷津。
若转载,须表明出处

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968260.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号