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

使用Crypto.Cipher.Blowfish算法在Python中加密和解密文件的方法

发布时间:2023-12-29 19:05:05

在Python中,可以使用Crypto.Cipher.Blowfish模块来实现文件的加密和解密操作。该模块是pycryptodome软件包的一部分。首先,你需要确保已安装pycryptodome库,使用pip install pycryptodome命令安装。

接下来,我们将依次编写加密和解密文件的函数,同时提供使用例子来演示其用法。

#### 加密文件

from Crypto.Cipher import Blowfish
from Crypto.Util.Padding import pad
import hashlib

def encrypt_file(file_name, password):
    # 生成16字节的加密盐
    salt = hashlib.sha256(password.encode()).digest()[:8]
    # 创建一个新的BLOWFISH密码对象,并使用salt初始化
    cipher = Blowfish.new(password.encode(), Blowfish.MODE_CBC, salt)
    
    # 打开文件,读取内容并加密
    with open(file_name, 'rb') as file:
        plaintext = file.read()
        ciphertext = cipher.encrypt(pad(plaintext, Blowfish.block_size))
    
    # 将加密内容写入新的加密文件
    with open(f'{file_name}.enc', 'wb') as file:
        file.write(ciphertext)

上述代码中,encrypt_file函数输入文件名和密码作为参数。文件内容一次全部读取,并使用Blowfish算法进行加密。加密盐使用密码的哈希值生成,并使用此盐对密码进行初始化。最后,将加密后的内容写入新的加密文件。

#### 解密文件

from Crypto.Cipher import Blowfish
from Crypto.Util.Padding import unpad
import hashlib

def decrypt_file(file_name, password):
    # 生成16字节的加密盐
    salt = hashlib.sha256(password.encode()).digest()[:8]
    # 创建一个新的BLOWFISH密码对象,并使用salt初始化
    cipher = Blowfish.new(password.encode(), Blowfish.MODE_CBC, salt)
    
    # 打开加密文件,读取内容并解密
    with open(file_name, 'rb') as file:
        ciphertext = file.read()
        plaintext = unpad(cipher.decrypt(ciphertext), Blowfish.block_size)
    
    # 将解密内容写入新的文件
    with open(f'{file_name[:-4]}', 'wb') as file:
        file.write(plaintext)

上述代码中,decrypt_file函数通过输入文件名和密码作为参数,打开加密文件并读取内容,使用Blowfish解密算法对内容进行解密。解密后的内容通过unpad函数去除填充。最后,将解密内容写入新的文件。

#### 用法示例

假设我们有一个名为example.txt的文件,其中内容为Hello, World!。现在我们将演示如何加密和解密此文件。

password = "MySecretPassword"

# 加密文件
encrypt_file("example.txt", password)
print("文件成功加密")

# 解密文件
decrypt_file("example.txt.enc", password)
print("文件成功解密")

运行以上代码后,你将在当前目录下看到加密后的example.txt.enc文件和解密后的example.txt文件。

使用Blowfish算法可以对文件进行加密和解密操作,确保安全性。然而,请注意安全保密性,如选择强密码和妥善管理密钥。