2010-07-22 58 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