我正在尝试加密文本,然后使用 XOR 对其进行解密。它改变了大部分字母,但跳过了一些。当我更改“键”时,它会跳过相同的字母。如果我尝试另一个文本,它也会跳过一些字母,但在不同的地方。我试图更改文本中的一个字母:“我的代码有问题”“îòere ós sõmeîòóng wrõng wóîò mã ùõþe”所以它不会加密字母“e”,但是当我将一个“e”更改为“X”时,它会起作用并加密字母“e”。text = "there is something wrong with my code"key = 154print(key)längd = (len(text))for a in range(0,längd): b = ord(text[a]) ny = b ^ key ny2 = chr(ny) text = text.replace(text[a],ny2)print(text)for a in range(0,längd): b = ord(text[a]) ny = b ^ key ny2 = chr(ny) text = text.replace(text[a], ny2)print(text)如果我尝试key = 153我得到"íñere ðs sömeíñðng wröng wðíñ mà úöýe".如果我尝试key = 154我得到"îòere ós sõmeîòóng wrõng wóîò mã ùõþe".如您所见,它不会改变字母“e,r,n,g,w,m”。
1 回答

动漫人物
TA贡献1815条经验 获得超10个赞
请注意,运行循环时未更改的字符是在字符串中出现偶数次的字符。相同的 XOR 操作用于加密和解密字符,因为将一个数字与另一个数字进行两次异或会得到相同的数字。您缺少的是 Python用第二个字符串str.replace()替换所有出现的第一个字符串的事实。当您遇到第一个 'e' 时,字符串中的所有 'e' 都将替换为key ^ ord('e')您刚刚遇到的那个。像“t”这样的其他字符也被多次异或,但您不会注意到它们,因为对数字进行 3 次异或与对数字进行 1 次异或相同。
为了更轻松地对字符进行迭代和操作,您应该使用可变序列类型,例如bytearray:
text = "there is something wrong with my code"
key = 154
print(key)
ba = bytearray(text, "latin_1")
for i in range(0, len(ba)):
ba[i] = ba[i] ^ key
print(ba.decode("latin_1"))
for i in range(0, len(ba)):
ba[i] = ba[i] ^ key
print(ba.decode("latin_1"))
添加回答
举报
0/150
提交
取消