【发布时间】:2019-06-24 08:56:59
【问题描述】:
我正在使用 Crypto 库在 Python 中实现 DES3。当我偶然发现下一个问题时,我正在做一些测试:
如果我要加密的纯文本包含奇怪的字符(如重音符号),则会失败。
例如,当我尝试加密下一个单词时,我的代码运行良好:
要加密的文本(长度为 8 的倍数):"Hello Jose "
但是,如果我尝试加密相同的文本但包含重音符号,它会失败:
要加密的文本(长度为 8 的倍数)= "Hello José "
我得到的错误是“ValueError:输入字符串的长度必须是 8 的倍数”。
如果我检查单词的长度,它是8的倍数。
plaintext="Hello Jose "
print(" Plain text:" + plaintext)
print(" Plain Text length:" + str(len(plaintext)))
结果:纯文本长度:16
接下来查找我的代码的简化示例:
from Crypto.Cipher import DES3
import binascii
import base64
plaintext="Hello Jose "
print(" Plain text:" + plaintext)
print(" Plain Text length:" + str(len(plaintext)))
#### ENCRYPTION
key ='173JKL3D93A9CNI1G6NP9A14'
key=bytes(key, 'utf-8')
plaintext_bytes=bytes(plaintext, 'utf-8')
print(" Plain Text length:" + str(len(plaintext_bytes)))
cipher_encrypt=DES3.new(key)
encrypted_text=cipher_encrypt.encrypt(plaintext_bytes)
print( " Encrypted word:" + str(encrypted_text))
#### DECRYPTION
cipher_encrypt=DES3.new(key)
decrypted_text=cipher_encrypt.decrypt(encrypted_text)
print(" Decripted text:" + str(decrypted_text,'utf-8') + "\n")
谁能帮我理解为什么它不能正常工作?
【问题讨论】:
-
检查
len(plaintext_bytes)。 -
您为什么使用“已弃用的加密标准”?
-
您正在检查工作明文的长度,而不是失败明文的长度。
é以 UTF-8 编码时不是单个字节。
标签: python encryption pycrypto des