我的解密功能有什么问题


import base64
import re
def encrypt(cleartext, key):
    to_return = bytearray(len(cleartext)) 
    for i in xrange(len(cleartext)):     
        to_return[i] = ord(cleartext[i]) ^ ord(key)
    return base64.encodestring(str(to_return))
def decrypt(ciphertxt,key):
    x = base64.decodestring(re.escape(ciphertxt))
    to_return = bytearray(len(x))
    for i in xrange(len(x)): 
        to_return[i] = ord(x[i]) ^ ord(key)
        while to_return[i]>127:
              to_return[i]-=127
    return to_return

当我加密鲍勃然后使用我的解密函数时,它会返回鲍勃。但是,对于较长的内容,例如加密时密文包含\斜杠的段落,它不起作用。我没有取回 ascii 字符或 base64 字符,我得到奇怪的汉字或方形字符。请任何见解为我指出正确的方向会有所帮助。

正如 jasonharper 所说,你通过调用 re.escape 来篡改你的 Base64 数据。一旦你摆脱了它,你的代码应该没问题。我还没有对它进行广泛的测试,但它在多行文本中对我来说可以正常工作。

您还应该从decrypt函数中删除它:

while to_return[i]>127: 
    to_return[i]-=127

如果原始明文是有效的 ASCII,它不会做任何事情,但如果明文确实包含 127>字节,它会弄乱解码。

但是,这些功能可能会更有效一些。

FWIW,这是一个在Python 2和Python 3上都能正常工作的版本。这段代码并不像在 Python 3 上那样高效,因为为了处理 Python 3 中文本和字节处理的变化而做出的妥协。

import base64
def encrypt(cleartext, key):
    buff = bytearray(cleartext.encode())
    key = ord(key)
    buff = bytearray(c ^ key for c in buff)
    return base64.b64encode(bytes(buff))
def decrypt(ciphertext, key):
    buff = bytearray(base64.b64decode(ciphertext))
    key = ord(key)
    buff = bytearray(c ^ key for c in buff)
    return buff.decode()
# Test
s = 'This is a testnof XOR encryption'
key = b'x53'
coded = encrypt(s, key)
print(coded)
plain = decrypt(coded, key)
print(plain)

蟒蛇 3 输出

b'Bzs6IHM6IHMycyc2ICdZPDVzCxwBczY9MCEqIyc6PD0='
This is a test
of XOR encryption

最新更新