基于Python的文件加密与解密工具的开发

2023-03-26 00:00:00 工具 解密 文件加密

下面是一个基于Python的文件加密与解密工具的示例代码,使用AES算法对文件进行加密和解密:

import os
from Crypto.Cipher import AES

# 定义加密函数
def encrypt_file(key, filename):
    # 加密文件的块大小
    chunksize = 64*1024

    # 生成随机的IV向量
    iv = os.urandom(16)

    # 创建AES加密器
    encryptor = AES.new(key, AES.MODE_CBC, iv)

    # 获取文件大小
    filesize = os.path.getsize(filename)

    # 输出加密文件名和加密前文件大小
    encrypted_filename = filename + '.enc'
    print(f'Encrypting {filename} ({filesize} bytes) to {encrypted_filename}...')

    # 打开加密后文件并写入IV向量
    with open(encrypted_filename, 'wb') as outfile:
        outfile.write(iv)

        # 加密文件内容
        with open(filename, 'rb') as infile:
            while True:
                chunk = infile.read(chunksize)
                if len(chunk) == 0:
                    break
                elif len(chunk) % 16 != 0:
                    # 填充数据
                    chunk += b' ' * (16 - len(chunk) % 16)
                outfile.write(encryptor.encrypt(chunk))

# 定义解密函数
def decrypt_file(key, filename):
    # 加密文件的块大小
    chunksize = 64*1024

    # 打开加密文件并读取IV向量
    with open(filename, 'rb') as infile:
        iv = infile.read(16)

        # 创建AES解密器
        decryptor = AES.new(key, AES.MODE_CBC, iv)

        # 输出解密文件名
        decrypted_filename = os.path.splitext(filename)[0]
        print(f'Decrypting {filename} to {decrypted_filename}...')

        # 解密文件内容
        with open(decrypted_filename, 'wb') as outfile:
            while True:
                chunk = infile.read(chunksize)
                if len(chunk) == 0:
                    break
                outfile.write(decryptor.decrypt(chunk))

            # 去掉填充数据
            outfile.truncate()

# 加密或解密文件
def process_file(key, filename, encrypt=True):
    if encrypt:
        encrypt_file(key, filename)
    else:
        decrypt_file(key, filename)

# 密钥,必须为16、24、32字节长
key = b'mysecretpassword12'

# 要加密的文件
filename = 'pidancode.com'

# 加密文件
process_file(key, filename, encrypt=True)

# 解密文件
process_file(key, 'pidancode.com.enc', encrypt=False)

该代码使用process_file函数对文件进行加密或解密,根据传入的encrypt参数进行判断。运行该代码将会在同一目录下生成加密文件pidancode.com.enc和解密文件pidancode.com。需要注意的是,这段代码中使用的密钥为明文,实际使用时应该使用安全的方式保存密钥,例如使用密钥管理系统或硬件安全模块。

相关文章