我在 PHP 中依次调用了以下函数:
$chal = pack('H32',$challenge);
$word = md5("\0" . $word . $chal);
我想在 Django python 中做同样的事情。请问您有什么建议吗?
这种方法产生与原始 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 的 pack() 正在做的事情。因此,您必须将原始挑战字符串分解为 2 个字符的块,并将每个块解释为十六进制八位字节。