文件加解密程序:Python & pycrypto

本文介绍了使用Python的pycrypto库实现的文件夹加解密功能,包括AES加密和解密过程,以及对文件按块读写的方法。文章提到存在的问题是未处理明文长度非16字节倍数的补位问题,但实际运行中可能成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

加解密程序

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'<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值