python 加密zip文件
时间: 2023-08-28 21:30:08 浏览: 151
RC4FileCrypt.rar_加密解密_Python_
要加密一个zip文件,可以使用Python内置的zipfile库和密码库来实现。以下是一些代码示例:
```python
import zipfile
import os
import tempfile
from cryptography.fernet import Fernet
def encrypt_zipfile(zipfile_path, password):
# 创建临时目录
with tempfile.TemporaryDirectory() as temp_dir:
# 解压缩zip文件到临时目录
with zipfile.ZipFile(zipfile_path, 'r') as zip_ref:
zip_ref.extractall(temp_dir)
# 加密解压缩后的文件
fernet = Fernet(password.encode())
for root, dirs, files in os.walk(temp_dir):
for file in files:
file_path = os.path.join(root, file)
with open(file_path, 'rb') as f:
data = f.read()
encrypted_data = fernet.encrypt(data)
with open(file_path, 'wb') as f:
f.write(encrypted_data)
# 创建加密后的zip文件
with zipfile.ZipFile(zipfile_path[:-4] + '_encrypted.zip', 'w', zipfile.ZIP_DEFLATED) as zip_ref:
for root, dirs, files in os.walk(temp_dir):
for file in files:
file_path = os.path.join(root, file)
zip_ref.write(file_path, os.path.relpath(file_path, temp_dir))
print('Zip file encrypted successfully')
def decrypt_zipfile(zipfile_path, password):
# 创建临时目录
with tempfile.TemporaryDirectory() as temp_dir:
# 解压缩加密的zip文件到临时目录
with zipfile.ZipFile(zipfile_path, 'r') as zip_ref:
zip_ref.extractall(temp_dir)
# 解密解压缩后的文件
fernet = Fernet(password.encode())
for root, dirs, files in os.walk(temp_dir):
for file in files:
file_path = os.path.join(root, file)
with open(file_path, 'rb') as f:
data = f.read()
decrypted_data = fernet.decrypt(data)
with open(file_path, 'wb') as f:
f.write(decrypted_data)
# 创建解密后的zip文件
with zipfile.ZipFile(zipfile_path[:-16] + '_decrypted.zip', 'w', zipfile.ZIP_DEFLATED) as zip_ref:
for root, dirs, files in os.walk(temp_dir):
for file in files:
file_path = os.path.join(root, file)
zip_ref.write(file_path, os.path.relpath(file_path, temp_dir))
print('Zip file decrypted successfully')
# 加密zip文件
zipfile_path = 'myzipfile.zip'
password = 'mypassword'
encrypt_zipfile(zipfile_path, password)
# 解密zip文件
zipfile_path = 'myzipfile_encrypted.zip'
password = 'mypassword'
decrypt_zipfile(zipfile_path, password)
```
在上面的代码中,我们使用了Python内置的zipfile库来处理zip文件,并使用密码库cryptography中的Fernet类来加密和解密文件。首先,我们定义了两个函数:encrypt_zipfile和decrypt_zipfile,分别用于加密和解密zip文件。接着,我们定义了一个zip文件路径变量和一个密码变量,用于指定要加密的zip文件和密码。在加密zip文件的函数中,我们使用了tempfile库创建了一个临时目录,并将zip文件解压缩到该目录中。然后,我们使用Fernet类加密解压缩后的文件,最后将加密后的文件重新打包成一个新的zip文件。在解密zip文件的函数中,我们也是先将加密的zip文件解压缩到临时目录中,然后使用Fernet类解密解压缩后的文件,最后将解密后的文件重新打包成一个新的zip文件。
阅读全文