我正在比较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()。这是确认的吗?或者我没有正确读到这个。
答案 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