2011-04-07 158 views
0

我有以下函數在PHP稱爲一個接一個:

$chal = pack('H32',$challenge); 
$word = md5("\0" . $word . $chal); 

我想在Django python中做同樣的事情。 請從你身邊獲取任何提示?

回答

1

這種方法產生相同的結果與原來的PHP(至少在x86_64)。

import hashlib 
import struct 

cha1 = struct.pack('16B', *[int(c, 16) for c in (challenge[i:i+2] 
    for i in xrange(0, len(challenge), 2))]) 

word = hashlib.md5('\0%s%s' % (word, cha1)).hexdigest() 

Python的struct.pack()方法不具有4位大小(單十六進制數字),這似乎是大致也是PHP的包格式說明()在做什麼。所以你必須把原來的挑戰字符串分解成2個字符塊,並將每個字符串解釋爲一個十六進制八位字節。

+0

非常感謝!我想知道爲什麼包會給我錯誤的結果,現在我明白了 – vsidou 2011-04-07 10:00:09