我有从头开始的奢侈,所以我想知道在PHP和Python之间使用什么好的哈希。
我只需要能够从每种语言的相同文本生成相同的哈希值。
根据我的阅读,PHP的md5()不能很好地工作。
答案 0 :(得分:5)
md5()
总是很好玩 - 它总是做同样的事情,因为它是标准的散列格式。
唯一的绊倒危险是MD5哈希的某些语言默认返回格式是包含十六进制字符的32字节ascii字符串,有些使用包含哈希值的文字二进制表示的16字节字符串。
PHP的md5()
默认返回一个32字节的字符串,但是如果你将true
传递给第二个参数,它将返回16字节的形式。因此,只要您知道您的其他语言使用哪个版本(在您的情况下为Python),您只需要确保从PHP获得正确的格式。
最好使用32字节的表单,具体取决于应用程序的通信方式。如果你使用基于纯文本(例如HTTP)的通信协议,使用任何东西的纯文本版本通常会更安全 - 在这种情况下,二进制文件更小,但在编写错误的服务器时可能会被传输损坏/客户端。
二进制与ascii问题适用于您能想到的任何哈希算法。
答案 1 :(得分:4)
你想从哈希中得到什么? (便携性,安全性,性能......)
根据我的阅读,PHP的md5()不能很好地工作。
你读了什么?为什么它不起作用?
我只需要能够从每种语言的相同文本生成相同的哈希
由于PHP仅提供crc32(非常不安全),md5和sha1开箱即用,因此您不需要进行大量的测试。当然,如果可移植性不是问题,那么可以使用mcrypt和openssl apis。最近hash PECL为您提供了一个巨大的选择。
答案 2 :(得分:1)
我建议使用sha1,因为它在两者中都是开箱即用的,但没有像md5这样的碰撞可用性。请参阅:http://en.wikipedia.org/wiki/MD5#Collision_vulnerabilities