【问题标题】:Python SHA512 salted passwords with crypt on MacOS X在 MacOS X 上使用 crypt 的 Python SHA512 加盐密码
【发布时间】:2016-02-21 00:57:31
【问题描述】:

我正在尝试生成加密的密码字符串,类似于 Linux 中的 /etc/shadow。由于某种原因,我得到的输出不同。有什么想法我错过了什么,一个比另一个长(不包括盐部分)?

#!/usr/bin/python
import crypt

alg = 6  # SHA512
salt = 'vb1tLY1qiY'
word = 'password'

insalt = '${}${}$'.format(alg, salt)

cryptWord = crypt.crypt(word, insalt)
print cryptWord

输出为:$6FMi11BJFsAc

如果我像这样在 Linux 中生成它:

mkpasswd --method=sha-512 --salt=vb1tLY1qiY password

输出为:$6$vb1tLY1qiY$WFHTa6CRShEuKg63vuPTYOVRK1oQiM6johIEs2JslF1904VhEdSXlHje74eB4uLXHrKNyZ4bPjSlWpZD6qIo71

【问题讨论】:

  • 无法复制。我在 2.7.6 和 3.4.3 上运行了你的 python 脚本。两者都产生了与mkpasswd 相同的完整输出。
  • @tdelaney 在repl.it 上用Python 3 试试,你会从crypt.crypt('password', '$6$vb1tLY1qiY$') 得到简短的回答
  • @TessellatingHeckler 哇,你是对的。在我的桌面上工作正常。让我感到困惑。
  • @TessellatingHeckler python crypt doc 说 请注意,此模块的行为取决于运行系统中 crypt(3) 例程的实际实现。。也许这与它有关。
  • @munircontractor 这是其中的一部分,但在 repl.it 上,crypt.crypt('password', '$6') 也返回 '$6FMi11BJFsAc'。该实现仅将前两个字符作为盐并忽略其余字符。根据我系统上的文档,$id$salt 是一个 glibc 扩展。

标签: python hash osx-yosemite crypt sha512


【解决方案1】:

我能够使用 passlib。它不是作为 python 的一部分安装的(至少在 OS X 上),但是你可以通过 pip 安装它。

sudo easy_install pip
pip install passlib
python -c "from passlib.hash import sha512_crypt; import getpass,string,random; print sha512_crypt.using(salt=''.join([random.choice(string.ascii_letters + string.digits) for _ in range(16)]),rounds=5000).hash(getpass.getpass())"

https://gist.github.com/hbeatty/25db5847e7068335681db88248d0deaf

【讨论】:

  • 我仍在寻找无需安装外部软件即可工作的解决方案。应该是可能的,因为 OSX 密码本身是 sha512 加密的。另外:如果您需要 sudo 在 Mac 上安装软件,这清楚表明您走错了路,应该尝试寻找替代方案。
猜你喜欢
  • 2012-11-18
  • 2015-04-12
  • 2013-12-20
  • 2012-06-12
  • 2019-05-08
  • 2013-12-31
  • 2021-02-15
  • 2011-02-23
相关资源
最近更新 更多