因此,我用python编写了一个小脚本,它显示了一个带有两个按钮和一个文本字段的gui。您在文本区域中键入并单击encrypt,文本突然看起来很疯狂。太酷了。
但是当你点击解密的时候,它不会回到原来的状态。以下是代码
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=
在我解密后,它不会丢失5个,它起作用了。再次感谢。
发布于 2012-02-19 12:19:23
您不能将任意字节放入文本区域。
您的加密算法是纯按字节的-它对字符的数值起作用。这是行不通的,即使对于ASCII码也是如此,因为字节0是一个经过特殊处理的ASCII码,而字节127 ( 'Z',字符122在上移五位时就变成了DEL字符)是一个ASCII码字符:不是您想要的!除了ASCII之外,现实世界的UTF-8有数千个无效的字节序列。
如果要像这样使用字节加密,则不能将结果放入文本字段中-它是二进制数据。如果您希望它能够进入文本字段,则必须确保它是不带控制字符、NUL字节或无效字节序列的有效文本。
让二进制文件变得干净的一种简单方法是在加密时对其进行Base64编码,并让解密的第一步是Base64解码。
最后注意:您还将加密文本区域末尾的换行符。这可能不是你想做的事情。
发布于 2012-02-19 22:12:44
这似乎是一个相当微不足道的“加密”来破解。任何有消息来源的人都可以阅读你的消息。一个安全的密码系统不应该依赖于算法的安全性。
您可以使用Python加密工具包(www.dlitz.net/software/pycrypto/)。它有许多不同的加密算法可用。您可以在以下位置找到一些如何使用它的示例:http://www.laurentluce.com/posts/python-and-cryptography-with-pycrypto/
如果你不关心安全性,为什么不使用一种标准编码(参见标准库参考的§7.8 'codec‘);
Ceasar密码:
>>> res = 'this is a test'.encode('rot_13')
>>> print res
guvf vf n grfg
>>> print res.decode('rot_13')
this is a testBase64编码:
>>> res = 'this is a test'.encode('base64')
>>> print res
dGhpcyBpcyBhIHRlc3Q=
>>> print res.decode('base64')
this is a testhttps://stackoverflow.com/questions/9346618
复制相似问题