首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的python加密软件不工作了

我的python加密软件不工作了
EN

Stack Overflow用户
提问于 2012-02-19 12:14:25
回答 2查看 312关注 0票数 1

因此,我用python编写了一个小脚本,它显示了一个带有两个按钮和一个文本字段的gui。您在文本区域中键入并单击encrypt,文本突然看起来很疯狂。太酷了。

但是当你点击解密的时候,它不会回到原来的状态。以下是代码

代码语言:javascript
复制
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个,它起作用了。再次感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-19 12:19:23

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

您的加密算法是纯按字节的-它对字符的数值起作用。这是行不通的,即使对于ASCII码也是如此,因为字节0是一个经过特殊处理的ASCII码,而字节127 ( 'Z',字符122在上移五位时就变成了DEL字符)是一个ASCII码字符:不是您想要的!除了ASCII之外,现实世界的UTF-8有数千个无效的字节序列。

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

让二进制文件变得干净的一种简单方法是在加密时对其进行Base64编码,并让解密的第一步是Base64解码。

最后注意:您还将加密文本区域末尾的换行符。这可能不是你想做的事情。

票数 5
EN

Stack Overflow用户

发布于 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密码:

代码语言:javascript
复制
>>> res = 'this is a test'.encode('rot_13')
>>> print res
guvf vf n grfg
>>> print res.decode('rot_13')
this is a test

Base64编码:

代码语言:javascript
复制
>>> res = 'this is a test'.encode('base64')
>>> print res
dGhpcyBpcyBhIHRlc3Q=

>>> print res.decode('base64')
this is a test
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9346618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档