Answers:
是的,您正在寻找mkpasswd
,(至少在Debian上是)该whois
软件包的一部分。不要问为什么...
anthony@Zia:~$ mkpasswd -m help
Available methods:
des standard 56 bit DES-based crypt(3)
md5 MD5
sha-256 SHA-256
sha-512 SHA-512
不幸的是,我的版本至少不加密。如果您的C库支持,则应该这样做(并且联机帮助页提供了-R选项来设置强度)。-R也可以在sha-512上使用,但是我不确定它是否为PBKDF-2。
如果需要生成bcrypt密码,则可以使用Crypt::Eksblowfish::Bcrypt
Perl模块相当简单地完成。
在诸如Fedora,CentOS或RHEL之类的任何Red Hat发行版中,该命令mkpasswd
都没有包含与Debian / Ubuntu通常包含的版本相同的开关集。
注意:该命令mkpasswd
实际上是expect
软件包的一部分,应避免使用。您可以使用以下任何一个命令找出它属于哪个软件包。
$ yum whatprovides "*/mkpasswd"
-or-
$ repoquery -q --file */mkpasswd
$ repoquery -q --file */mkpasswd
expect-0:5.43.0-8.el5.x86_64
expect-0:5.43.0-8.el5.i386
这两种方法均优于使用方法,rpm
因为不必安装软件包即可定位*/mkpasswd
。
要解决此问题,您可以使用以下Python或Perl单行代码生成SHA-512密码。请注意,这些都是盐腌的:
$ python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'
-或脚本化-
$ python -c 'import crypt; print(crypt.crypt("somesecret", crypt.mksalt(crypt.METHOD_SHA512)))'
$ python -c "import crypt, getpass, pwd; \
print(crypt.crypt('password', '\$6\$saltsalt\$'))"
$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/
注意:$ 6 $表示sha512。对这种指定算法方法的支持取决于操作系统级别crypt(3)库函数(通常在libcrypt中)的支持。它不依赖于python版本。
$ perl -e 'print crypt("password","\$6\$saltsalt\$") . "\n"'
$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/
在这些示例中,密码为字符串“ password”,盐为“ saltsalt”。这两个示例都使用$ 6 $,这表示您希望加密使用SHA-512。
crypt.mksalt(crypt.METHOD_SHA512)
用来生成盐,而不是使用固定的盐。
crypt.mksalt
仅在Python 3.x中可用
crypt.mksalt
在CentOS 7.1上访问
您可以使用包装中doveadm
包含的实用dovecot
程序。
doveadm pw -s SHA512-CRYPT
结果示例:
{SHA512-CRYPT}$6$0JvQ1LLFESzA16.I$JVdKAIq0igudTq06BMqzT9rL1gRawMPwLr9U3/kBMKUqZdONfa0wubC89C35LKl3aE16CRH57BfGb4ygPLggL1
只需剪切{SHA512-CRYPT},您将获得SHA512哈希字符串。
doveadm(jotik): Fatal: Error reading configuration: stat(/etc/dovecot/dovecot.conf) failed: Permission denied (euid=1000(jotik) egid=100(users) missing +x perm: /etc/dovecot, we're not in group 97(dovecot), dir owned by 0:97 mode=0750)
运行以下命令:
$ /sbin/grub-crypt --sha-512
然后输入您要散列的单词。
为了扩展上述@slm的解决方法,如果您担心有人掌握了bash的历史记录并看到纯文本密码,则可以raw_input()
在python语句中插入salt和password字段的位置,以便提示您输入密码。键入时不会屏蔽文本,但不会在bash历史记录中显示该文本。您也可以在前导空格处启动命令,但是我总是忘记这样做。
python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '\$6\$' + raw_input() + '\$')"
bash
为不记录HISTCONTROL=ignorespace
在.bashrc
文件中添加空格的命令。运行命令时,只要从历史记录中排除,只需键入一个空格,然后键入实际命令。
如果您使用sim的答案中的Python(> = 2.7)方法,并希望在生成密码之前先确认密码-因为您输入的密码太宽泛...
$ python -c 'import crypt,getpass;pw=getpass.getpass(); print(crypt.crypt(pw), crypt.mksalt(crypt.METHOD_SHA512) if (pw==getpass.getpass("Confirm: ")) else exit())'
Linux上的openssl版本“ OpenSSL 1.1.1”和MacOS上的openssl版本“ LibreSSL 2.6.5”都支持md5_crypt。
只需运行并输入密码:
openssl passwd -crypt
Password:
Verifying - Password:
<results_into_a_md5_crypt_password>
或直接向CLI提供纯文本密码:
openssl password -crypt <plain_text_password_goes_here>
<results_into_a_md5_crypt_password>
您可以使用sha512sum
:
echo "password" | sha512sum
sha1sum
吗