如何在命令行上创建 SHA512 密码哈希

stu*_*ent 107 security password encryption hashsum

在 Linux 中,我可以使用sha1pass mypassword. 是否有类似的命令行工具可以让我创建sha512哈希?对于同样的问题BcryptPBKDF2

slm*_*slm 86

在任何 Red Hat 发行版(例如 Fedora、CentOS 或 RHEL)上,该命令mkpasswd不包含与 Debian/Ubuntu 中通常包含的版本相同的一组开关。

注意:该命令mkpasswd实际上是expect包的一部分,应该避免使用。您可以使用这些命令中的任何一个来找出它属于哪个包。

$ yum whatprovides "*/mkpasswd"
-or-
$ repoquery -q --file */mkpasswd
Run Code Online (Sandbox Code Playgroud)

例子

$ repoquery -q --file */mkpasswd
expect-0:5.43.0-8.el5.x86_64
expect-0:5.43.0-8.el5.i386
Run Code Online (Sandbox Code Playgroud)

这两种方法都优于使用,rpm因为不必安装软件包即可定位*/mkpasswd.

解决方法

要解决此问题,您可以使用以下 Python 或 Perl 单行程序生成 SHA-512 密码。请注意,这些是加盐的:

Python (>= 3.3)

$ python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'
Run Code Online (Sandbox Code Playgroud)

- 或脚本 -

$ python -c 'import crypt; print(crypt.crypt("somesecret", crypt.mksalt(crypt.METHOD_SHA512)))'
Run Code Online (Sandbox Code Playgroud)

Python(2.x 或 3.x)

$ python -c "import crypt, getpass, pwd; \
             print(crypt.crypt('password', '\$6\$saltsalt\$'))"

$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/
Run Code Online (Sandbox Code Playgroud)

注意:$6$ 表示 sha512。对这种指定算法的方法的支持取决于操作系统级 crypt(3) 库函数(通常在 libcrypt 中)的支持。它不依赖于 python 版本。

珀尔

$ perl -e 'print crypt("password","\$6\$saltsalt\$") . "\n"'
$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/
Run Code Online (Sandbox Code Playgroud)

在这些示例中,密码是字符串“password”,而盐是“saltsalt”。两个示例都使用$6$,这表示您希望 crypt 使用 SHA-512。

  • perl(大概是python)使用系统函数“crypt”。因此它们不可移植,它们需要一个能够理解所请求的散列类型的 crypt 函数。OSX crypt 没有 - 它只是给我一个旧式 DES 加密的字符串。 (4认同)
  • 对于 python one-liner,您可以使用 `crypt.mksalt(crypt.METHOD_SHA512)` 来生成盐而不是使用固定的盐。 (3认同)
  • 在命令行输入明文密码之前,请确保您在 HISTCONTROL 中设置了“ignorespace”(即,首先在 CentOS/RHEL 上执行此操作:echo 'export HISTCONTROL="ignoredups:ignorespace"' > /etc/profile.d /histcontrol.sh && 源 /etc/profile.d/histcontrol.sh)。否则,它将保存在您的 ~/.bash_history 中。 (3认同)
  • @JakeCobb `crypt.mksalt` 仅在 Python 3.x 中可用 (2认同)

der*_*ert 71

是的,您正在寻找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
Run Code Online (Sandbox Code Playgroud)

不幸的是,我的版本至少不做 bcrypt。如果您的 C 库这样做,它应该(并且联机帮助页提供了一个 -R 选项来设置强度)。-R 也适用于 sha-512,但我不确定它是否适用于 PBKDF-2。

如果您需要生成 bcrypt 密码,您可以使用Crypt::Eksblowfish::BcryptPerl 模块相当简单地完成。


obo*_*vyk 17

您可以使用该doveadm程序dovecot包中包含的实用程序。

doveadm pw -s SHA512-CRYPT
Run Code Online (Sandbox Code Playgroud)

结果示例:

{SHA512-CRYPT}$6$0JvQ1LLFESzA16.I$JVdKAIq0igudTq06BMqzT9rL1gRawMPwLr9U3/kBMKUqZdONfa0wubC89C35LKl3aE16CRH57BfGb4ygPLggL1
Run Code Online (Sandbox Code Playgroud)

只需剪切{SHA512-CRYPT}即可获得 SHA512 哈希字符串。


小智 15

OpenSSL 有

openssl passwd -6
Run Code Online (Sandbox Code Playgroud)

帮助说:

$ openssl passwd --help
Usage: passwd [options]
Valid options are:
...
 -6                  SHA512-based password algorithm
Run Code Online (Sandbox Code Playgroud)

为了一致的输出,您可以指定盐:

openssl passwd -6 -salt <YOUR_SALT>
Run Code Online (Sandbox Code Playgroud)

输出类似于:

$6$YOUR_SALT$q/oDR4twC1ik4RoxTJJtX.3MjenHVapkMaBbq2NcRHGQjqhIWRNcEVitYZhyIx98D7lF7qs0vLTq17X0nEr8I.
Run Code Online (Sandbox Code Playgroud)

with:6在表示算法的“$”之间(上面的“-6”),然后是YOUR_SALT和“$”,以SHA512和结束。


小智 12

运行此命令:

$ /sbin/grub-crypt --sha-512
Run Code Online (Sandbox Code Playgroud)

然后输入您想要散列的单词。