PHP Crypt()与Python的Crypt()对于Hashing

时间:2013-05-11 10:01:32

标签: php python hash crypt

我正在比较PHP的crypt()和Pythons crypt()。阅读Python的手册:

  

http://docs.python.org/2/library/crypt.html

     

平台:Unix

     

该模块实现了crypt(3)例程的接口,即   基于修改的DES算法的单向散列函数;看到了   Unix手册页了解更多详情。可能的用途包括允许   Python脚本用于接受来自用户的键入密码或尝试   用字典破解Unix密码。

     

请注意,此模块的行为取决于实际情况   在运行的系统中实现crypt(3)例程。   因此,当前实现中可用的任何扩展都将   也可以在这个模块上使用。

     crypt.crypt(word,salt)字通常是用户的密码   在提示符处或在图形界面中键入。盐通常是一种   随机双字符串,用于扰乱DES   算法以4096种方式之一。盐中的人物必须在   设置[./a-zA-Z0-9]。以字符串形式返回哈希密码,这将是   由与盐相同的字母组成   前两个字符代表盐本身。)

从阅读PHP的地穴:

  

http://php.net/manual/en/function.crypt.php

     

CRYPT_SHA512 - 带有前缀为$ 6 $的十六个字符盐的SHA-512哈希。如果salt字符串以'rounds = $'开头,则为数字   N的值用于表示散列循环应该多少次   被执行,就像Blowfish上的成本参数一样。默认   轮数为5000,最小为1000,最大为   999,999,999。在该范围之外的任何N的选择都将被截断   到最近的限制。

公平地说,我不包括Python的第三方模块......我想比较PHP crypt()和Python crypt()两个库存。

阅读完这两个并进行比较....看起来像使用SHA512的PHP Crypt()并且它的最大值为999,999,999次散列,远远超过Python的Crypt()。这是确认的吗?或者我没有正确读到这个。

2 个答案:

答案 0 :(得分:2)

请注意,Python crypto只是crypt (3)调用的包装器,而您提到的文档是指基本POSIX版本,可在任何地方使用。 crypto的大多数实现都在进一步扩展,正如文档所说:

  

请注意,此模块的行为取决于正在运行的系统中crypt(3)例程的实际实现。因此,此模块也将提供当前实现中可用的任何扩展。

如果查看glibc version(绝大多数Linux系统使用的那个),您会发现PHP文档列出的所有算法都已实现。另外,请查看the source code of one crypt module以查看是否支持迭代(rounds)参数。

您问题中的PHP文档列出了所有算法,因此作者理所当然地认为它将安装在具有最近glibc的系统上,或者他们设法模拟所有系统上缺少的算法。

答案 1 :(得分:1)

Python的crypt()是UNIX等价物的代理,用于密码散列; PHP是一般的加密服务提供商; Python有hashlib module