在Linux中,我可以使用sha1pass mypassword创建SHA1密码哈希。是否有类似的命令行工具可让我创建sha512哈希? BcryptPBKDF2的问题相同。

评论

你不是说sha1sum吗?

@Tichodroma不,实际上有一个sha1pass命令,它是Debian上syslinux-common软件包的一部分。

有一个sha512sum命令是coreutils的一部分,并且类似的是openssl sha512,但是sha1pass所没有的多余东西也没有。

#1 楼

是的,您正在寻找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模块相当简单地进行操作。

#2 楼

在诸如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(> = 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$'))"

$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/


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

Perl

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


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

评论


对于python单一代码,您可以使用crypt.mksalt(crypt.METHOD_SHA512)生成盐,而不是使用固定的盐。

–杰克·科布(Jake Cobb)
14年8月26日在0:15

@JakeCobb crypt.mksalt仅在Python 3.x中可用

–里卡多·穆里(Riccardo Murri)
2014年9月24日在7:41

在命令行上输入明文密码之前,请确保在HISTCONTROL中设置了“ ignorespace”(即,首先在CentOS / RHEL上执行此操作:echo'export HISTCONTROL =“ ignoredups:ignorespace”'> /etc/profile.d /histcontrol.sh &&源/etc/profile.d/histcontrol.sh)。否则,它将保存在您的〜/ .bash_history中。

–帕特里克(Patrick)
2014年12月3日19:38

perl(大概是python)使用系统函数“ crypt”。因此它们不是可移植的,它们需要能够理解请求的哈希类型的crypt函数。 OSX crypt并没有-它只是给了我一个老式的DES加密字符串。

–丹·普里兹(Dan Pritts)
16年4月13日在21:13

@RiccardoMurri我拥有Python 2.7.5,并可以在CentOS 7.1上访问crypt.mksalt

–user12345
16年7月16日在22:09



#3 楼

您可以使用doveadm软件包中随附的dovecot实用程序。

doveadm pw -s SHA512-CRYPT


结果示例:

{SHA512-CRYPT}q4312078qJvQ1LLFESzA16.I$JVdKAIq0igudTq06BMqzT9rL1gRawMPwLr9U3/kBMKUqZdONfa0wubC89C35LKl3aE16CRH57BfGb4ygPLggL1


只需剪切{SHA512-CRYPT},您将获得SHA512哈希字符串。

评论


以普通用户的身份对我不起作用:doveadm(jotik):致命:读取配置错误:stat(/etc/dovecot/dovecot.conf)失败:权限被拒绝(euid = 1000(jotik)egid = 100(用户)缺少+ x烫发:/ etc / dovecot,我们不在组97(dovecot)中,目录归0:97模式所有= 0750)

– jotik
19年3月11日在6:13

“权限被拒绝”与原始问题无关。 dovecot的默认设置是不允许最终用户读取/ etc / dovecot子目录中的任何文件,尤其是用户(和密码)文件。成为root用户,然后您可以看到这些文件。

–约翰·格林
20年1月14日在18:02

关键是doveadm不能由普通用户运行,因此对于不是(或不能成为)root的用户,此命令不是原始问题的解决方案。通常,某个人对读取/ etc / dovecot目录中的任何文件都不感兴趣,也不必只是为了生成密码哈希即可。

–蒂尔曼·施密特(Tilman Schmidt)
20年11月4日在15:31

#4 楼

运行以下命令:

$ /sbin/grub-crypt --sha-512


,然后输入要散列的单词。

评论


-bash:/ sbin / grub-crypt:没有这样的文件或目录

–威尔·谢泼德(Will Sheppard)
17年3月3日在10:51

我不相信grub在c7上,因此您可以使用:python -c'import crypt,getpass;打印(crypt.crypt(getpass.getpass(),crypt.mksalt(crypt.METHOD_SHA512)))'

–ucemike
17年11月3日14:37



#5 楼

OpenSSL具有

openssl passwd -6


帮助说:

$ openssl passwd --help
Usage: passwd [options]
Valid options are:
...
 -6                  SHA512-based password algorithm


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

openssl passwd -6 -salt <YOUR_SALT>


输出类似于:

$YOUR_SALT$q/oDR4twC1ik4RoxTJJtX.3MjenHVapkMaBbq2NcRHGQjqhIWRNcEVitYZhyIx98D7lF7qs0vLTq17X0nEr8I.


其中:6在“ $”之间表示算法(“上面的-6“),后跟YOUR_SALT和” $“,以SHA512的总和结束。

评论


(据记录,Debian 9中似乎没有此版本的openssl)

–乔里尔
20年8月1日在11:03

#6 楼

为了扩展上述@slm的解决方法,如果您担心有人掌握了bash的历史记录并看到纯文本密码,可以在salt和password字段所在的python语句中插入raw_input(),以便提示您输入密码。键入时不会隐藏文本,但不会在bash历史记录中显示该文本。您也可以在前导空格处启动命令,但我总是忘记这样做。

python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '$6$' + raw_input() + '$')"


评论


您还可以将bash配置为不记录以空格开头的命令,该命令在您的.bashrc文件中添加HISTCONTROL = ignorespace。在运行命令时,只要从历史记录中排除,只需键入一个空格,然后键入实际命令。

–theillien
16-4-10在3:05



#7 楼

sha512 htpasswd

要求用户和密码并生成常规htpasswd文件的命令:

python -c 'import crypt,getpass; print(getpass.getpass("Name: ")+":"+crypt.crypt(getpass.getpass(),crypt.mksalt(crypt.METHOD_SHA512)))' >> htpasswd


适用于所有Python版本> 2.5。

#8 楼

如果您使用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())'


评论


在此答案的2017年11月29日版本中,它说这适用于python 2.7(或更高版本)。 python2.7的crypt模块没有mksalt()。我也认为您希望将crypt.mksalt()调用作为crypt.crypt()的第二个参数(放错位置的封闭括号)。

–胡安
18 Mar 5 '18 at 14:33

#9 楼

Linux上的openssl版本“ OpenSSL 1.1.1”和Mac OS上的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>


评论


crypt仍可能导致不安全的经典DES实施,仅采用密码的前八个字符。您可以使用passwd -crypt -salt oo多次尝试-首先使用aaaaaaaa(8xa),然后使用aaaaaaaaaa(10xa)-当两者都导致相同的密码哈希时证明

–奥利弗·哈德(Oliver Hader)
20 May 27 '14:21

#10 楼

PBKDF2

我在Go中编写了一个简单的应用程序,它可以生成PBKDF2哈希,因为OpenSSL并未为此提供命令行工具。
它支持sha1,sha256,sha512和md5。 />
您可以自己构建它,或在“发行”部分下载发行的二进制文件。

https://github.com/riotkit-org/gpbkdf2


用法非常简单:

gpbkdf2 --passphrase=my-secret-passphrase --salt=my-secret-salt --digest-algorithm=sha512 --digest-rounds=10000 --length=128


#11 楼

您可以使用sha512sum

echo "password" | sha512sum


评论


这个答案是不正确的。该命令将不会生成有效的SHA-512密码哈希。它将只计算字符串password \ n的校验和\(请注意,结尾也有换行符)。 Unix密码哈希是固定的,并且在两个“ $”符号之间包含哈希版本代码。请参阅@slm的答案。

–zorlem
13年11月27日,0:05



更具体地说,问题在于,虽然密码有些混乱,但是此方法容易受到en.wikipedia.org/wiki/Rainbow_table攻击。

–沮丧Daniel
17年2月18日在21:43