私はPHPで次々と呼び出される次の関数を持っています:
$chal = pack('H32',$challenge);
$word = md5("\0" . $word . $chal);
Djangopythonでも同じことをしたいと思います。あなたの側からのヒントはありますか?
このアプローチでは、元の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ビットサイズ(単一の16進文字)のフォーマット指定子がありません。これは、おおよそphpのpack()が行っていることのようです。したがって、元のチャレンジ文字列を最大2文字のチャンクに分割し、それぞれを16進オクテットとして解釈する必要があります。