sha1pass mypassword
创建SHA1密码哈希。是否有类似的命令行工具可让我创建sha512
哈希? Bcrypt
和PBKDF2
的问题相同。#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
评论
你不是说sha1sum吗?@Tichodroma不,实际上有一个sha1pass命令,它是Debian上syslinux-common软件包的一部分。
有一个sha512sum命令是coreutils的一部分,并且类似的是openssl sha512,但是sha1pass所没有的多余东西也没有。