2

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

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

平台:Unix

该模块实现了 crypt(3) 例程的接口,该例程是基于改进的 DES 算法的单向散列函数;有关详细信息,请参阅 Unix 手册页。可能的用途包括允许 Python 脚本接受用户输入的密码,或尝试用字典破解 Unix 密码。

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

crypt.crypt(word, salt) word 通常是用户在提示符或图形界面中输入的密码。salt 通常是一个随机的两个字符的字符串,它将用于以 4096 种方式之一扰乱 DES 算法。salt 中的字符必须在集合 [./a-zA-Z0-9] 中。以字符串形式返回散列密码,该字符串由与 salt 相同的字母组成的字符(前两个字符代表 salt 本身)。

通过阅读 PHP 的 Crypt:

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

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

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

在阅读了这两篇文章并进行了比较之后……看起来 PHP Crypt() 使用了 SHA512,它的最大 999,999,999 次散列轮次比 Python 的 Crypt() 强得多/优越得多。这得到证实了吗?或者我没有正确阅读这个。

4

2 回答 2

3

Note that Python crypto is only a wrapper around crypt (3) call and that the document you mentioned refers to the base POSIX version, available anywhere. Most implementations of crypto have further expanded on that, as the documentation says:

Notice that the behavior of this module depends on the actual implementation of the crypt(3) routine in the running system. Therefore, any extensions available on the current implementation will also be available on this module.

If you look at the glibc version (which is the one used by a vast majority of Linux systems), you will find that all the algorithms listed by the PHP doc have been implemented. Also, have a look to the source code of one crypt module to see that iterations (rounds) parameter is supported.

The PHP doc in your question lists all the algorithms, so either the authors take for granted that it will be installed on a system with a recent glibc, or they managed to emulate missing algorithms on all systems.

于 2013-05-11T10:29:30.967 回答
2

Python's crypt() is a proxy to the UNIX equivalent which is used for password hashing; where as PHP's is a general encryption service provider; for which Python has the hashlib module

于 2013-05-11T10:16:19.360 回答