我的python加密软件无法运行

Lys*_*sol 1 python encryption

所以我在python中编写了一个小脚本,它带有一个带有2个按钮和一个文本字段的gui.您键入文本区域并单击加密,文本突然看起来很疯狂.coooooool.

但是当你点击解密时,它不会回到原来的状态.这是代码

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()
Run Code Online (Sandbox Code Playgroud)

问题是它没有显示原始文本.它似乎让它更加神秘.这有什么不对?请帮忙.

更新:更改它,所以它只是添加5.它的工作原理.所以这告诉我,这是我添加最后一个字符代码值的部分.还有一个问题:它添加了一个新行和这个奇怪的行字符(不是管道---> |).

现在代码是固定的.谢谢.结果如下:WW1ueCVueCV1d2p5eX4laHR0cTMlWW1mc3AlfnR6JXh5ZmhwJXR7andrcXR8JWt0dyV5bWolZnN4fGp3Mw8 =

在我解密之后所以它不会带走五个,它起作用了.再次感谢.

Bor*_*lid 5

您不能将任意字节放入文本区域.

您的加密算法纯粹按字节顺序 - 它适用于字符的数值.即使对于ASCII,这也不会起作用,因为字节0是NUL特殊处理的ASCII ,而字节127('Z',字符122,当向上移动5时)是一个DEL字符:不是你想要的!超越ASCII,现实世界的UTF-8有数千个无效字节序列.

如果您要使用这样的字节加密,则无法将结果放入文本字​​段 - 它是二进制数据.如果您希望它能够进入文本字段,则必须确保它是没有控制字符,NUL字节或无效字节序列的有效文本.

制作二进制卫生的一种简单方法是对加密进行Base64编码,并将解密的第一步作为Base64解码.

最后说明:您还要加密文本区域末尾的换行符.可能不是你想做的事情.