使用python加密库加密带有重音符号的数据

2024-04-19 07:42:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用加密库在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")

有人能帮我理解为什么它不能正常工作吗?你知道吗


Tags: keytext文本hellobytesencryptcipherprint
1条回答
网友
1楼 · 发布于 2024-04-19 07:42:42

高雄是对的。该算法将纯文本读取为字节字符串。要知道,一个带重音的字符的字节长度是2。请参见下一个示例:

>> a='a'
>> print("length:" + str(len(a.encode('utf-8'))))
length:1
>> a='á'
>> print("length:" + str(len(a.encode('utf-8'))))
length:2

所以,首先你要把文本编码成字节,然后计算长度。你知道吗

你能做的是计算8的下一个倍数,这应该是纯文本的长度。在那之后,您可以用空白填充字符串到该长度。你知道吗

相关问题 更多 >