python - 当 rounds=5000 时,SHA512 crypt 返回 *0
问题描述
由于python程序返回后的几天*0
:
import crypt
# broken:
>>> crypt.crypt('pw', '$6$rounds=5000$0123456789abcdef')
'*0'
# works:
>>> crypt.crypt("pw", '$6$0123456789abcdef')
'$6$0123456789abcdef$zAYvvEJcrKSqV2KUPTUM1K9eaGv20n9mUjWSDZW0QnwBRk0L...'
>>> crypt.crypt('pw', '$6$rounds=5001$0123456789abcdef')
'$6$rounds=5001$0123456789abcdef$mG98GkftS5iu1VOpowpXm1fgefTbWnRm4rbw...'
>>> crypt.crypt("pw", '$6$rounds=4999$0123456789abcdef')
'$6$rounds=4999$0123456789abcdef$ulXwrQtpwNd/t6NVUJo53AXMpp40IrpCHFyC...'
我用一个小的 C 程序做了同样的事情,crypt_r
输出是一样的。我在一些帖子中读到,*0
并且*1
会在出现错误时返回。
根据手册页,自 glibc 2.7 起支持crypt(3)
该rounds=xxx
参数,默认值为 5000,当没有rounds
给出参数时(如第二个示例中所示)。但是为什么我不允许设置rounds
为 5000?
我将 Fedora 28 与 glibc 2.27 一起使用。不同 Python 版本(甚至 Python2 和 Python3)的结果是相同的。在 PHP 中使用crypt
也可以按预期工作。但最有趣的是,在 Docker 容器 ( fedora:28
) 中运行相同的命令是有效的:
>>> crypt.crypt("pw", '$6$rounds=5000$0123456789abcdef')
'$6$rounds=5000$0123456789abcdef$zAYvvEJcrKSqV2KUPTUM1K9eaGv20n9mUjWS...'
有人知道这种行为的原因吗?
解决方案
推荐阅读
- c++ - 挂钩 CreateFile 抛出异常:读取访问冲突
- android - 如何使用 Volley 在列表视图中显示图像?
- python - 对 Cloudera Manager ApiResource 使用加密密码而不是明文密码
- intellij-idea - 将 chromedriver 设置为在 IntelliJ 内的 Geb 测试中使用的默认值
- python - DREAM - 神经网络不收敛 - 上下损失
- python - pyenv 卸载是否会删除通过 pip 安装的所有软件包?
- android - 在哪里添加菜单以在所有活动中工作
- c++ - 下面的打印树功能为什么不起作用?
- c# - 在 if 子句中验证空查询
- javascript - Javascript如何通过多个分隔符拆分字符串并将它们包含在结果中