所以我用 python 编写了一个小脚本,它会显示一个带有 2 个按钮和一个文本字段的图形用户界面。您在文本区域中键入内容并单击加密,文本突然看起来很疯狂。酷酷的。
但是当你点击解密时,它不会回到原来的状态。这是代码
from Tkinter import *
import ttk
root = Tk()
textArea = Text(root, state = "normal")
def encrypt():
message = textArea.get('1.0', 'end')
newMessage = ''
lastChar = ''
for c in message:
if lastChar != '':
newMessage += chr((ord(c) + ord(lastChar)) % 256)
lastChar = chr((ord(c) + ord(lastChar)) % 256)
else:
newMessage += chr((ord(c) + 5) % 256)
lastChar = chr((ord(c) + 5) % 256)
textArea.delete('1.0', 'end')
textArea.insert('end', newMessage)
def decrypt():
message = textArea.get('1.0', 'end')
newMessage = ''
lastChar = ''
for c in message:
if lastChar != '':
newMessage += chr((ord(c) - ord(lastChar)) % 256)
lastChar = chr((ord(c) - ord(lastChar)) % 256)
else:
newMessage += chr((ord(c) - 5) % 256)
lastChar = chr((ord(c) - 5) % 256)
textArea.delete('1.0', 'end')
textArea.insert('end', newMessage)
encrypt = ttk.Button(root, text = "Encrypt", command = encrypt)
encrypt.pack({"side": "top"})
decrypt = ttk.Button(root, text = "Decrypt", command = decrypt)
decrypt.pack({"side": "top"})
textArea.pack({"side": "bottom"});
mainloop()
问题是它没有显示原文。它似乎使它更加神秘。这里有什么问题?请帮忙。
更新: a 改变了它,所以它只加了 5。它起作用了。所以这告诉我这是我添加最后一个字符代码值的部分。还有一个问题:它添加了一个新行和这个奇怪的行字符(不是管道 ---> |)。
现在代码已修复。谢谢。这是结果: WW1ueCVueCV1d2p5eX4laHR0cTMlWW1mc3AlfnR6JXh5ZmhwJXR7andrcXR8JWt0dyV5bWolZnN4fGp3Mw8=
在我进行解密后它不会带走五个,它起作用了。再次感谢。
请您参考如下方法:
您不能将任意字节放入文本区域。
您的加密算法纯粹是按字节计算的 - 它适用于字符的数值。这不会起作用,即使对于 ASCII,因为字节 0 是一个 ASCII NUL - 经过特殊处理,而字节 127('Z',字符 122,当向上移动 5 时变成)是DEL 字符:不是您想要的!除了 ASCII,现实世界的 UTF-8 有数千个无效字节序列。
如果您打算像这样使用字节加密,则不能将结果放入文本字段中 - 它是二进制数据。如果您希望它能够进入文本字段,则必须确保它是没有控制字符、NUL 字节或无效字节序列的有效文本。
使二进制文件卫生的一种简单方法是在加密时对其进行 Base64 编码,并且解密的第一步是 Base64 解码。
最后一点:您还对文本区域末尾的换行符进行了加密。可能不是您想做的事情。
