在 Linux 中,我可以使用 创建 SHA1 密码哈希sha1pass mypassword
。是否有类似的命令行工具可以让我创建sha512
哈希值?Bcrypt
和 的问题相同PBKDF2
。
答案1
在任何 Red Hat 发行版(例如 Fedora、CentOS 或 RHEL)上,该命令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 (>= 3.3)
$ 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(2.x 或 3.x)
$ 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$这表示您希望 crypt 使用 SHA-512。
答案2
是的,您正在寻找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
不幸的是,我的版本至少不支持 bcrypt。如果您的 C 库这样做,它应该这样做(并且联机帮助页提供了一个 -R 选项来设置强度)。 -R 也适用于 sha-512,但我不确定它是否是 PBKDF-2。
如果您需要生成 bcrypt 密码,可以使用Crypt::Eksblowfish::Bcrypt
Perl 模块相当简单地完成。
答案3
OpenSSL 有
openssl passwd -6
帮助说:
$ openssl passwd --help
Usage: passwd [options]
Valid options are:
...
-6 SHA512-based password algorithm
为了获得一致的输出,您可以指定盐:
openssl passwd -6 -salt <YOUR_SALT>
输出类似于:
$6$YOUR_SALT$q/oDR4twC1ik4RoxTJJtX.3MjenHVapkMaBbq2NcRHGQjqhIWRNcEVitYZhyIx98D7lF7qs0vLTq17X0nEr8I.
with:6
在表示算法的“$”之间(上面的“-6”),然后是YOUR_SALT
和 “$”,最后是 SHA512 和。
答案4
运行这个命令:
$ /sbin/grub-crypt --sha-512
然后输入您想要散列的单词。