gpt4 book ai didi

python - 使用 str.replace 在循环中运行 XOR 加密不会更改某些字符

转载 作者:行者123 更新时间:2023-12-01 08:05:57 25 4
gpt4 key购买 nike

我正在尝试加密文本,然后使用 XOR 对其进行解密。它更改了大部分字母,但跳过了一些字母。当我更改“键”时,它会跳过相同的字母。如果我尝试其他文本,它也会跳过一些字母,但在不同的位置。

我尝试更改文本中的字母:
“我的代码有问题”
“有一些事情发生了”

所以它不会加密字母“e”,但是当我将一个“e”更改为“X”时,它会起作用并加密字母“e”。

text = "there is something wrong with my code"
key = 154
print(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”。

最佳答案

请注意,运行循环时不变的字符是在字符串中出现偶数次的字符。相同的 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"))

关于python - 使用 str.replace 在循环中运行 XOR 加密不会更改某些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55530758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com