Skip to main content
 首页 » 编程设计

python之我的 python 加密软件不工作

2025年05月04日16qlqwjy

所以我用 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 解码。

最后一点:您还对文本区域末尾的换行符进行了加密。可能不是您想做的事情。