将散列从php的crypt()移植到python

2024-04-29 01:49:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道PHP的crypt()函数是否有一个python同源项,它以类似的方式执行,生成一个随机salt并将其嵌入保存的字符串中。在

我有一个哈希密码表,这些密码是使用$5$字符串密钥创建的,用于设置基于SHA256的salt密码。这些散列以固定的间隔在两端附加了一些额外的记录熵,但是将这些字符从字符串中分离出来并获得核心哈希值是很简单的,根本不是问题。在

我看过python文档,在hashlib中找不到任何似乎使用php的crypt()语法的方法。PHP中使用的方法(在salt、algo和rounds之间用美元符号分隔的输入格式)是否是该语言独有的?在

谢谢。在

编辑:

看起来,python自己的本机crypt函数的修订版将使用与PHP类似的过程。从3.3预发布文档:

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

编辑

最后找到了Passlib,一个用纯python提供此功能的库。在

http://packages.python.org/passlib/index.html


Tags: 方法函数字符串文档orghttp编辑密码
2条回答

我意识到这个问题很古老,但是我在尝试用Python实现一个最初用PHP编写的登录算法时发现了这个问题。PHP中的crypt函数使用一些不安全的DES算法,包括bcrypt。这取决于你用什么杂凑字符串。Passlib几乎是复制应用程序当前从phpcrypt获得的功能的最佳选择。取一个哈希密码,看看字符串的前面。您应该看到类似$2a$、$3$、$6$(或类似的)的内容。请注意,如果此字符串不存在,则很可能使用标准DES哈希。在

把这些信息带到这个链接:

http://pythonhosted.org/passlib/modular_crypt_format.html#mcf-identifiers

然后,将其与需要在Python中实现的算法相匹配。方案标识符是指向与哈希算法相关的passlib文档的链接。在这一点上,你应该拥有完成重新实现所需的所有信息。在

它看起来确实非常类似于FreeBSD's crypt(请参阅手册页中的“模块化密码”)。我不太记得在Linux或其他系统中是不是同样的方式,但这似乎表明它不是唯一的。在

据我所知,在Python中没有直接的等价物,但是要实现自己的目标应该不会太困难,因为加密算法本身应该在hashlib中得到支持。在

相关问题 更多 >