欢迎访问宙启技术站
智能推送

用Python编写一个简单的文件加密程序

发布时间:2023-12-04 12:14:20

下面是一个使用Python编写的简单文件加密程序的示例:

import hashlib
from Crypto.Cipher import AES


def encrypt_file(key, filename):
    chunk_size = 64 * 1024
    output_filename = filename + ".enc"
    initialization_vector = hashlib.sha256(key.encode()).digest()[:16]
    cipher = AES.new(key.encode(), AES.MODE_CBC, initialization_vector)

    with open(filename, 'rb') as input_file:
        with open(output_filename, 'wb') as output_file:
            output_file.write(initialization_vector)

            while True:
                chunk = input_file.read(chunk_size)
                if len(chunk) == 0:
                    break
                elif len(chunk) % 16 != 0:
                    chunk += b' ' * (16 - len(chunk) % 16)

                encrypted_chunk = cipher.encrypt(chunk)
                output_file.write(encrypted_chunk)


def decrypt_file(key, filename):
    chunk_size = 64 * 1024
    output_filename = filename[:-4]  # remove the ".enc" extension
    with open(filename, 'rb') as input_file:
        initialization_vector = input_file.read(16)
        cipher = AES.new(key.encode(), AES.MODE_CBC, initialization_vector)

        with open(output_filename, 'wb') as output_file:
            while True:
                chunk = input_file.read(chunk_size)
                if len(chunk) == 0:
                    break

                decrypted_chunk = cipher.decrypt(chunk)
                output_file.write(decrypted_chunk.rstrip(b' '))


# 使用例子
key = "mysecretkey"  # 加密密钥

filename = "example.txt"  # 需要加密的文件名
encrypt_file(key, filename)
print("加密成功!加密后的文件保存为: " + filename + ".enc")

encoded_filename = filename + ".enc"  # 需要解密的文件名
decrypt_file(key, encoded_filename)
print("解密成功!解密后的文件保存为: " + filename)

在这个示例中,我们使用了Python中的hashlib和Crypto库来实现文件加密功能。程序使用AES对称加密算法,密钥长度为256位。

该程序定义了两个函数:encrypt_file(key, filename)decrypt_file(key, filename)encrypt_file()函数接受一个密钥和一个文件名作为输入,将指定的文件进行加密,并将加密后的内容保存为原文件名加上.enc的后缀名。decrypt_file()函数接受一个密钥和一个被加密的文件名作为输入,将指定的文件进行解密,并将解密后的内容保存在原文件名(去掉.enc后缀)中。

在使用例子中,我们指定了一个密钥 mysecretkey 和一个需要加密的文件 example.txt。首先,我们将 example.txt 文件加密成 example.txt.enc 文件,并打印出加密后的文件名。然后,我们使用 example.txt.enc 文件来解密文件,并打印出解密后的文件名。

这是一个简单的文件加密程序示例,对于更加复杂和安全的加密需求,建议使用更专业的加密库和算法。