记得那是一个下午,我无聊地浏览着电脑,玩着pycharm,随手在插件搜索栏里随手搜了一些东西,然后我迷迷糊糊地就装了这个库Fernet,我也不知道这个库是干什么地,网上也没有关于这个库地任何资料,但是我用的是pycharm,我装的那些库都有基本语法介绍的,然后我把pycharm关于这个库的介绍复制到百度翻译上去寻找翻译,然后慢慢摸索,我就发现了这个库的神奇了,这些下面具体再讲,就是这么神奇的经历哈哈哈哈。
正文okok正式开始工作
在我的上一篇博客中,我详细地介绍了这个库的安装教程,不会的可以看上一篇,也可以私信问我。我们剖析一下Fernet的函数吧
下面展示一些 基本函数。
generate_key函数先讲这个generate_key函数吧
fernet.Fernet.generate_key()
这个函数是生成一个密钥,我们可以把这个密钥赋值给一个变量
例如:
key = fernet.Fernet.generate_key() print(key)
我们所返回的结果是这样子的:zY3GonZRjThl1N4DhbdI1rH6zqkOVaD46tek-icLxLM=
这就是我们要的密钥了,解密时就必须要用到它。
————————————————————分界线————————————————————
我们再来讲下一个函数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吧
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,还好,但是我运行是却闪退,希望有大佬可以指点迷津。
若转载,须表明出处



