编写一个能进行DESEDE加密解密的程序
时间: 2024-10-13 21:17:11 浏览: 30
认证码Token加密解密代码
4星 · 用户满意度95%
好的,下面是一个简单的DESEDE(Triple DES)加密和解密的Python示例,我们使用了`cryptography`库。在这个例子中,用户输入明文,然后对其进行加密并输出加密后的结果;接着,用户输入加密后的密文,将其解密并显示原始内容。
```python
import base64
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.padding import PaddedBlockMode, PaddingError
def get_key():
# 这里只是一个示例,实际应用中应该从安全来源获取密钥
key = input("请输入16字节的密钥(例如 'wJxX9sF5tDn0vGZiEaA='): ")
return base64.b64decode(key)
def desede_encrypt(plaintext, key):
backend = default_backend()
cipher = Cipher(algorithms.TripleDES(key), modes.ECB(), backend=backend)
encryptor = cipher.encryptor()
try:
padded_plaintext = PaddedBlockMode(encryptor.algorithm()).encode(plaintext)
ciphertext = encryptor.update(padded_plaintext) + encryptor.finalize()
return base64.b64encode(ciphertext).decode()
except PaddingError:
print("错误:明文长度不是DES块大小的倍数")
return None
def desede_decrypt(ciphertext, key):
backend = default_backend()
cipher = Cipher(algorithms.TripleDES(key), modes.ECB(), backend=backend)
decryptor = cipher.decryptor()
decoded_cipher = base64.b64decode(ciphertext)
try:
decrypted_data = PaddedBlockMode(decryptor.algorithm()).decode(decoded_cipher)
return decrypted_data
except PaddingError:
print("错误:无法正确解密,可能是无效的密文")
return None
if __name__ == "__main__":
while True:
mode = input("请选择操作(e - 加密, d - 解密): ").lower()
if mode == 'e':
key = get_key()
text = input("请输入要加密的文本: ")
encrypted_text = desede_encrypt(text, key)
if encrypted_text:
print(f"加密后的文本: {encrypted_text}")
elif mode == 'd':
key = get_key()
encrypted_text = input("请输入要解密的密文: ")
decrypted_text = desede_decrypt(encrypted_text, key)
if decrypted_text:
print(f"解密后的文本: {decrypted_text}")
else:
print("无效的选择,请尝试'e'或'd'.")
阅读全文