首先,需要纠正一个常见的误解:TextBlob 这个 Python 库本身并不具备文本加密或解密的能力。它的主要用途是处理文本数据,在自然语言处理(NLP)任务中广受欢迎,例如情感分析、词性标注等。如果希望在 Python 项目中实现文本加密,必须依赖专门的加密库。

那么具体应该如何操作?不用担心,Python 生态系统中拥有众多成熟且值得信赖的加密库可供选择。下面介绍两种主流且实用的方法,你可以根据项目的实际需求灵活选用。
1. 使用 cryptography 库实现对称加密
这是目前 Python 社区备受推崇的加密库之一,提供了高级且易于使用的接口。借助它,实现对称加密变得非常直观。
首先,你需要安装该库。打开终端或命令行,执行以下命令:
pip install cryptography
安装完成后,即可在代码中调用。下面以 Fernet 对称加密方案为例,它能同时保证加密数据的机密性和完整性:
from cryptography.fernet import Fernet
# 第一步:生成一个密钥。此密钥必须妥善保存,解密时需要用到同一个密钥。
key = Fernet.generate_key()
# 第二步:使用该密钥创建 Fernet 加密套件对象。
cipher_suite = Fernet(key)
# 第三步:准备需要加密的文本。
plain_text = "Hello, world!"
# 注意,encrypt 方法要求输入字节(bytes),因此需要先进行编码。
encrypted_text = cipher_suite.encrypt(plain_text.encode())
# 第四步:执行解密操作。
decrypted_text = cipher_suite.decrypt(encrypted_text).decode()
print("原始文本:", plain_text)
print("加密后的文本:", encrypted_text)
print("解密后的文本:", decrypted_text)
运行上述代码,你将看到类似下面的输出结果。加密后的文本是一串看似杂乱无章的字节序列:
原始文本: Hello, world!
加密后的文本: b'gAAAAABf5oXxN6DpzU5z9u3OvtmzYzFvI9yD-YzSz5J4T3bDqgYDyZo_Lx3Y5J0s6YbKYw=='
解密后的文本: Hello, world!
2. 使用 pycryptodome 库实现 AES 加密
如果你需要更低层级、更灵活的控制,或者希望使用像 AES 这样的标准算法,那么 `pycryptodome` 库将是强大的选择。它是久负盛名的 `PyCrypto` 库的一个活跃维护分支。
同样,先执行安装命令:
pip install pycryptodome
下面演示如何利用 AES 算法在 EAX 模式下进行加密与解密。EAX 模式能够同时提供保密性和数据认证:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from base64 import b64encode, b64decode
# 生成一个16字节(128位)的随机密钥
key = get_random_bytes(16)
# 创建 AES 加密器,使用 EAX 模式,它会自动生成一个随机 nonce(一次性数字)
cipher = AES.new(key, AES.MODE_EAX)
# 加密文本
plain_text = "Hello, world!"
# encrypt_and_digest 方法同时返回密文和认证标签(tag)
cipher_text, tag = cipher.encrypt_and_digest(plain_text.encode())
# 通常将 nonce、tag 和密文一起存储或传输,这里将它们拼接并用 base64 编码以便查看
encrypted_text = b64encode(cipher.nonce + tag + cipher_text)
# 解密时,需要重新创建加密器,并传入相同的密钥和之前生成的 nonce
cipher = AES.new(key, AES.MODE_EAX, nonce=cipher.nonce)
# 解密并验证数据的完整性
decrypted_text = cipher.decrypt_and_verify(cipher_text, tag).decode()
print("原始文本:", plain_text)
print("加密后的文本:", encrypted_text)
print("解密后的文本:", decrypted_text)
输出结果将展示加密后的 Base64 字符串以及解密还原的原文:
原始文本: Hello, world!
加密后的文本: b''
解密后的文本: Hello, world!
总结来说,上述两种方法都能高效地完成文本加密任务。`cryptography` 库的 Fernet 方案更加“开箱即用”,适合快速实现安全的数据存储或传输;而 `pycryptodome` 库则为算法和参数的选择提供了更大的灵活性。
无论选择哪种方案,有两点需要牢记:第一,加密后的输出通常是二进制数据,在存储或传输时可能需要做 Base64 编码等处理;第二,密钥管理至关重要——用于解密的密钥必须与加密时使用的密钥完全一致,并且要确保密钥本身的安全。
