我正在将一个用 PHP 编写的身份验证库翻译成 Python。这都是遗留代码,原始开发人员早已不复存在。他们使用 PHP 的“pack”命令使用“H”标志将字符串转换为十六进制。PHP 的文档将其描述为“十六进制字符串,高位优先”。我读了另一个建议使用 binascii.unhexlify() 的问题(Python 等效于 php pack),但是每当我传入非十六进制字符时都会抱怨。
所以我的问题是 PHP pack 函数对非十六进制字符有什么作用?是把它们扔掉,还是有一个额外的步骤来执行翻译。Python中有比binascii.unhexlify更好的方法吗?
所以打包'H *'
php -r 'print pack("H*", md5("Dummy String"));'
退货
??????=?PW??
在蟒蛇中:
secret = binascii.unhexlify( "Dummy String" )
TypeError: Non-hexadecimal digit found
谢谢您的帮助。
[编辑]
所以 DJV 基本上是正确的。我需要先将值转换为 md5,但这就是有趣的地方。在 python 中,md5 库通过“digest”方法返回二进制数据。
在我的情况下,我可以跳过所有 binascii 调用并使用
md5.md5('Dummy String').digest()
这在 PHP 中与以下内容相同:
pack("H*", md5("虚拟字符串"));
好玩的东西。很高兴知道。