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

通过Python实现MODE_ECB模式实现文件加密功能

发布时间:2024-01-04 08:35:08

MODE_ECB是一种对称加密模式,它将明文分成固定大小的块,并使用相同的密钥对每个块进行加密。在Python中,我们可以使用pycrypto库来实现该加密模式。下面是一个使用pycrypto库实现MODE_ECB模式的文件加密功能的Python代码示例:

from Crypto.Cipher import AES
import os

# 定义密钥和初始向量
key = b'sixteenbytekey1'
iv = os.urandom(16) # 加密算法需要一个初始向量
cipher = AES.new(key, AES.MODE_ECB, iv)

def encrypt_file(input_file, output_file):
    try:
        with open(input_file, 'rb') as file:
            plaintext = file.read()
            # 添加填充以适应固定大小的块
            plaintext += b'\0' * (AES.block_size - len(plaintext) % AES.block_size)
            ciphertext = cipher.encrypt(plaintext)

        with open(output_file, 'wb') as file:
            file.write(ciphertext)
            print("文件加密成功")
    except Exception as e:
        print("文件加密失败:", str(e))

def decrypt_file(input_file, output_file):
    try:
        with open(input_file, 'rb') as file:
            ciphertext = file.read()
            decrypted = cipher.decrypt(ciphertext)
            # 删除填充
            decrypted = decrypted.rstrip(b'\0')

        with open(output_file, 'wb') as file:
            file.write(decrypted)
            print("文件解密成功")
    except Exception as e:
        print("文件解密失败:", str(e))

# 测试文件加密功能
input_file = "input.txt"
output_file = "encrypted.txt"
encrypt_file(input_file, output_file)

# 测试文件解密功能
input_file = "encrypted.txt"
output_file = "decrypted.txt"
decrypt_file(input_file, output_file)

上述代码中,我们引入了Crypto.Cipher模块中的AES类,并使用AES.MODE_ECB模式创建了一个AES对象。接下来,我们定义了两个函数encrypt_filedecrypt_file来实现文件加密和解密。

encrypt_file函数中,我们首先打开输入文件,并读取其中的内容。然后,我们使用AES.block_size来计算需要填充的字节数,并使用\0进行填充。接着,我们调用cipher.encrypt方法对填充后的明文进行加密,得到密文。最后,我们打开输出文件,并将密文写入其中。

decrypt_file函数中,我们首先打开输入文件,并读取其中的密文。然后,我们调用cipher.decrypt方法对密文进行解密,并使用rstrip方法删除填充。最后,我们打开输出文件,并将解密后的明文写入其中。

你可以将以上的代码保存在一个.py文件中,然后运行该文件来测试文件加密和解密功能。在运行过程中,你需要将input.txt替换为你要加密的文件的路径,encrypted.txt替换为加密后文件的输出路径,以及decrypted.txt替换为解密后文件的输出路径。

使用该代码,你可以实现文件的加密和解密功能,并能够根据需要自定义加密算法的密钥和初始向量。