如何在Python中实现加密和解密文件(详细教程)

Python如何加密和解密文件?如何使用带有密码学库的对称加密方案在 Python 中加密和解密文件?
加密是以只有授权方才能访问的方式对一条信息进行编码的过程。这非常重要,因为它允许你安全地保护你不希望任何人看到或访问的数据。
如何在Python中实现加密和解密文件?在本教程中,你将学习如何使用 Python 使用加密库来加密文件或任何字节对象(也包括字符串对象)。
我们将使用对称加密,这意味着我们用来加密数据的相同密钥也可用于解密。有很多加密算法,我们将使用的库建立在AES 算法之上。
注意:了解加密算法和散列算法之间的区别很重要,在加密中,一旦拥有密钥,你就可以检索原始数据,而散列函数则不能,这就是为什么它们被称为单向加密。
相关文章  如何在 Python 中提取和解密 Chrome Cookie。
Python加密和解密文件示例 - 让我们从安装加密开始:

pip3 install cryptography

打开一个新的 Python 文件,让我们开始吧:
from cryptography.fernet import Fernet

生成密钥Python如何加密和解密文件?Fernet 是对称认证密码学的实现,让我们从生成该密钥并将其写入文件开始:
def write_key(): """ Generates a key and save it into a file """ key = Fernet.generate_key() with open("key.key", "wb") as key_file: key_file.write(key)

generate_key()函数会生成一个新的 fernet 密钥,你真的需要把它保存在一个安全的地方,如果你丢失了密钥,你将无法再解密用这个密钥加密的数据。
由于此密钥是唯一的,因此我们不会在每次加密任何内容时生成密钥,因此我们需要一个函数来为我们加载该密钥:
def load_key(): """ Loads the key from the current directory named `key.key` """ return open("key.key", "rb").read()

字符串加密如何在Python中实现加密和解密文件?现在我们知道如何获取密钥,让我们从加密字符串对象开始,只是为了让你先熟悉它。
Python加密和解密文件示例 - 生成密钥并将其写入文件:
# generate and write a new key write_key()

让我们加载该密钥:
# load the previously generated key key = load_key()

一些消息:
message = "some secret message".encode()

我们需要对字符串进行编码,将它们转换为适合加密的字节,encode()方法使用utf-8编解码器对该字符串进行编码。使用该键初始化 Fernet 类:
# initialize the Fernet class f = Fernet(key)

加密消息:
# encrypt the message encrypted = f.encrypt(message)

f.encrypt()方法对传递的数据进行加密,这种加密的结果被称为“Fernet 令牌”,具有很强的隐私性和真实性保证。
让我们看看它的外观:
# print how it looks print(encrypted)

输出:
b'gAAAAABdjSdoqn4kx6XMw_fMx5YT2eaeBBCEue3N2FWHhlXjD6JXJyeELfPrKf0cqGaYkcY6Q0bS22ppTBsNTNw2fU5HVg-c-0o-KVqcYxqWAIG-LVVI_1U='

解密:
decrypted_encrypted = f.decrypt(encrypted) print(decrypted_encrypted)

b'some secret message'

这确实是相同的信息。
f.decrypt()方法解密Fernet令牌。这将在成功解密时返回原始明文作为结果,否则将引发异常。
还学习:  如何在 Python 中加密和解密 PDF 文件。
文件加密Python如何加密和解密文件?现在你知道如何基本加密字符串,让我们深入研究文件加密,我们需要一个函数来加密给定文件名和密钥的文件,Python加密和解密文件示例:
def encrypt(filename, key): """ Given a filename (str) and key (bytes), it encrypts the file and write it """ f = Fernet(key)

使用给定的键初始化 Fernet 对象后,让我们首先读取该文件:
with open(filename, "rb") as file: # read all file data file_data = https://www.lsbin.com/file.read()

之后,加密我们刚刚读取的数据:
# encrypt data encrypted_data = https://www.lsbin.com/f.encrypt(file_data)

使用相同的名称写入加密文件,因此它将覆盖原始文件(不要在敏感信息上使用它,只需测试一些垃圾数据):
# write the encrypted file with open(filename, "wb") as file: file.write(encrypted_data)

好的,大功告成,现在进入解密函数,除了我们将使用decrypt()函数而不是encrypt()函数之外,它是相同的过程:
def decrypt(filename, key): """ Given a filename (str) and key (bytes), it decrypts the file and write it """ f = Fernet(key) with open(filename, "rb") as file: # read the encrypted data encrypted_data = https://www.lsbin.com/file.read() # decrypt data decrypted_data = f.decrypt(encrypted_data) # write the original file with open(filename,"wb") as file: file.write(decrypted_data)

我们来测试一下,我在当前目录下有一个csv文件和一个key,如下图所示:
如何在Python中实现加密和解密文件(详细教程)

文章图片
Python加密和解密文件示例:它是一个完全可读的文件,要加密它,我们需要做的就是调用我们刚刚编写的函数:
# uncomment this if it's the first time you run the code, to generate the key # write_key() # load the key key = load_key() # file name file = "data.csv" # encrypt it encrypt(file, key)

Python如何加密和解密文件?一旦你执行了这个,你可能会看到文件变大了,而且是垃圾数据,你一个字也读不懂!
【如何在Python中实现加密和解密文件(详细教程)】要将文件恢复为原始形式,只需调用decrypt()函数:
# decrypt the file decrypt(file, key)

如何在Python中实现加密和解密文件?就是这样!你将看到原始文件代替之前加密的文件出现。
查看cryptography的官方文档以获取更多详细信息和说明。
但是请注意,你需要提防大文件,因为文件需要完全在内存中才能适合加密,你需要考虑使用一些拆分数据的方法或对大文件进行文件压缩!
这是经过一些重构后的完整代码,我只是让它很容易作为脚本运行。

    推荐阅读