2010-07-22 71 views
2

我想一个字符串转换为MD5和为base64。这是我取得了迄今:如何基于64位编码字符串的MD5校验?

base64.urlsafe_b64encode("text..." + Var1 + "text..." + 
    hashlib.md5(Var2).hexdigest() + "text...") 

Python会引发一个TypeError它说:Unicode objects must be encoded before hashing

编辑:这是我现在有:

var1 = "hello" 
var2 = "world" 
b1 = var1.encode('utf-8') 
b2 = var2.encode('utf-8') 

result = "text" + 
    base64.urlsafe_b64encode("text" + b1 + "text" + 
    hashlib.md5(b2).hexdigest() + "text") + 
    "text" 
+0

您可能要对这个问题的措辞改为'字符串转换到Base64和MD5它。我认为这可能会倒退。 – sigint 2010-07-22 21:05:12

+0

此外,您可能会发现深入Python 3的[上串章(http://diveintopython3.org/strings.html)是一个有益的参考。 – 2010-07-22 21:11:31

回答

2

Var1Var2是字符串(UNICODE),但md5()urlsafe_b64encode()功能需要普通的旧字节作为输入。

您必须转换Var1Var2的字节序列。为此,您需要告诉Python如何将字符串编码为一系列字节。它们编码为UTF-8,你可以这样做:

b1 = Var1.encode('utf-8') 
b2 = Var2.encode('utf-8') 

然后,您可以通过这些字节字符串的函数:

bmd5 = hashlib.md5(b2).digest() # get bytes instead of a string output 
b3 = "text...".encode('utf-8') # need to encode these as bytes too 
base64.urlsafe_b64encode(b3 + b1 ...) 
+0

我调用函数字节()上VAR1和VAR2但它并没有帮助。给了一个TypeError:'没有编码的字符串参数'。 编辑:现在,当使用encode()方法时,我得到错误:'无法将字节'对象隐式转换为str' – Dor 2010-07-22 21:05:39

+0

如果要使用'bytes()',则需要指定该字符串将被编码。例如:'B1 =字节(VAR1, 'UTF-8')'或'B1 =字节(VAR2, 'ASCII')'。 – 2010-07-22 21:07:35

+0

请参阅我的编辑。 – Dor 2010-07-22 21:09:46