从 php 到 django for pack('H32',$challenge) 和 md5("\0" . $word . $challenge)

发布于 2024-10-30 12:49:36 字数 166 浏览 3 评论 0 原文

我在 PHP 中依次调用了以下函数:

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

我想在 Django python 中执行相同的操作。 请问您有什么建议吗?

i have the following functions called one after the other in PHP :

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

I would like to do the same in Django python.
Any tips from your side please ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

妄司 2024-11-06 12:49:36

这种方法产生与原始 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 个字符的块,并将每个块解释为十六进制八位字节。

This approach produces the same result as the original php (at least on 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's struct.pack() method doesn't have a format specifier for a 4-bit size (single hex char), which seems to be roughly what php's pack() is doing. So you have to break the original challenge string up into to 2-char chunks and interpret each of those as a hex octet.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文