在PHP和Python之间使用什么是好的哈希?

时间:2011-12-09 10:25:47

标签: php python

我有从头开始的奢侈,所以我想知道在PHP和Python之间使用什么好的哈希。

我只需要能够从每种语言的相同文本生成相同的哈希值。

根据我的阅读,PHP的md5()不能很好地工作。

3 个答案:

答案 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