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字符我得到了奇怪的汉字或方形字符。请有任何见解指出我正确的方向将有所帮助。
答案 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)