Python base64 encryptstring

时间:2013-11-04 19:15:02

标签: python encryption base64

我尝试构建一个可以转换由此函数生成的加密字符串的函数:

def encrypt2(message,key):
return base64.encodestring("".join([chr(ord(message[i]) ^ ord(key[i % len(key)])) 
                                 for i in xrange(len(message))]))

因此函数接受一个字符串和一个有4位数的键(键是一个字符串),并使用encodestring函数对其进行编码。 我构建的用于解码它的函数看起来相同,但有一点不同,编码字符串更改为解码字符串。我认为它应该工作,但它打印错误信息,“不正确的填充”。 我应该在解密函数中改变什么才能解决这个问题?

def decrypt2(message,key):
    return (base64.decodestring("".join([chr(ord(message[i]) ^ ord(key[i % len(key)])) 
                                      for i in xrange(len(message))])))

这是我试图执行的内容:

message = "n"
key = "8080"
encrypt = encrypt2(message,key)
decrypt = decrypt2(encrypt,key)
print "Message: %s \nEncrypt: %s \nDecrypt: %s" %(message,encrypt,decrypt)

正如我所说,带解密的行返回了“填充错误”错误。

2 个答案:

答案 0 :(得分:3)

您的(不安全)“加密”函数返回普通的base64编码文本,对您的密文进行编码。

您的解密函数解密输入文本(实际上是base64),然后将“解密”文本传递给base64解码器。

由于原始base64文本未加密,尝试解密会导致垃圾,这是无效的base64。

答案 1 :(得分:0)

为了使建议具体,请更换您的解码功能:

def decrypt2(message,key):
    decoded = base64.decodestring(message)
    return "".join(chr(ord(decoded[i]) ^ ord(key[i % len(key)]))
                   for i in xrange(len(decoded)))

有更有效的方法可以做到这一点;-)例如,

def decrypt2(message, key):
    from itertools import cycle
    decoded = base64.decodestring(message)
    return "".join(chr(a ^ b) for a, b in zip(map(ord, decoded),
                                              cycle(map(ord, key))))