我的解密功能有什么问题?

时间:2017-10-11 00:21:02

标签: python python-2.7 encryption

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

当我加密bob然后使用我的解密函数它返回bob。但是对于更长的事情,例如加密时的段落,密文包含\ slashes它不起作用。我没有得到ascii字符或base64字符我得到了奇怪的汉字或方形字符。请有任何见解指出我正确的方向将有所帮助。

1 个答案:

答案 0 :(得分:2)

正如jasonharper所说,您通过调用car::scatterplotMatrix(~mpg+disp+hp+drat+wt+qsec, data=diacars, diagonal="density", smoother=gamLine) 来修改Base64数据。一旦你摆脱它,你的代码应该没问题。我还没有对它进行过广泛的测试,但是对于我来说,它可以使用多行文本。

您还应该从re.escape函数中删除它:

decrypt

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

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

FWIW,这里是一个可以在Python 2和Python 3上正常运行的版本。由于处理上的变化所做的妥协,这个代码不像Python 3那样有效。 Python 3中的文本和字节处理。

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

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 test\nof XOR encryption'
key = b'\x53'
coded = encrypt(s, key)
print(coded)
plain = decrypt(coded, key)
print(plain)