加解密程序
Python,pycrypto(使用的加密工具,在 Python 笔记的第三方库中有简单介绍)
操作:输入需要加解密文件夹的相对位置(./asd
),然后选择加密或解密,然后会加解密文件夹中所有的文件。
加密:分块读取加密再写回,直至文件读完。加密文件会重命名为文件名.文件后缀.enc
。加密的文件,会组织成和操作文件夹对象同样的结构,然后放到与程序同目录下的output-xxx
文件夹中。
解密:同样分块读取解密再写回,直至文件读完。解密文件不会重新搞个文件夹,解密完是在相同的位置,然后删除加密文件。
潜在问题:没有搞补位,就是 pycrypto 加密时明文 len(bytes) 得是 16 的整数倍。我这儿没有去考虑,之前写了也是错的,就没加,但是还是成功的,不知道有没有特殊情况。
代码
import os
import time
import random
from Crypto.Cipher import AES
MAX_BLOCK_SIZE = 1024 * 1024 * 20 # 加密时每次读20M
EMPTY_BYTES = bytes()
OUTPUT_DIRECTORY = "./output"
KEY_LENGTH = 16 # 16字节,对应了其nonce和tag
KEY = b'\xa2P^G2\xb3O\x9d\xa9u\x00\x9ds\xd5\xc3\xfd' # KEY = get_random_bytes(KEY_LENGTH) 方法来自 Crypto.Random
def calculate_execution_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
execution_time = end_time - start_time
print("Method '{func.__name__}' executed in %d minutes %.3f seconds" % (
execution_time // 60, execution_time % 60))
return result
return wrapper
# 对指定文件进行加密
def encrypt(file_path, create_file_path):
with open(file_path, 'rb'<