我使用加密库在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")
有人能帮我理解为什么它不能正常工作吗?你知道吗
高雄是对的。该算法将纯文本读取为字节字符串。要知道,一个带重音的字符的字节长度是2。请参见下一个示例:
所以,首先你要把文本编码成字节,然后计算长度。你知道吗
你能做的是计算8的下一个倍数,这应该是纯文本的长度。在那之后,您可以用空白填充字符串到该长度。你知道吗
相关问题 更多 >
编程相关推荐