在 Arch Linux 中,如何使用命令行为密码创建单个 md5 哈希?当然,我知道有可用的安全密码哈希算法,而 md5 不是,但这只是实验的一部分。
答案1
简单echo
来说就是md5sum。
在生成哈希之前,第一个结果将考虑字符串末尾的换行符。
$ echo P@ssword1 | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba -
否则@AFH如果您希望没有换行符,请执行以下操作:
$ echo -n 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6 -
答案2
没有任何答案提到echo -n 'password' | …
,您会将密码写入持久存储,即您的历史记录。
您可以通过在命令前添加空格来避免这种情况(具体取决于 shell),具体方法如下(请针对您的 shell 进行测试)。请阅读您的 shell 文档,了解如何处理这种情况。
或者,您可以md5sum
直接使用,通过运行md5sum
,输入密码,然后Ctrl+D。不要Enter在密码和之间打勾Ctrl+D,除非您想在哈希中包含换行符。
答案3
这是一个使用 openssl 的示例
echo -n 'stack overflow' | openssl md5
(stdin)= 481b8423202598ecfb233c5fa68caf68
Openssl 实现了几种不同的散列算法,如果您有一天需要不同的算法。
答案4
似乎每个人都建议使用echo
——至少,幸运的是,大多数时候,使用-n
,这可以缓解一它的问题(它在末尾打印一个换行符)。
但echo
不一定一致。它有许多行为怪癖,你需要记住,并且系统之间可能不兼容。最好改用printf
。
因此你应该使用
$ printf '%s' 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6 -
$
使用时printf
,如果您想在末尾添加换行符,则必须自行明确添加:
$ printf '%s\n' 'P@ssword1' | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba -
$ echo 'P@ssword1' | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba -
$
而不必询问是否获取它(并希望echo
在稍后运行的系统上也能同样工作):
$ echo -n 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6 -
$
进一步阐述怪癖echo
我上面提到过,下面是其中几个:
- 在不同的系统上,它的工作方式不同。许多现代系统支持
-n
告诉echo
不要用换行符终止输出,但有些可能不支持。如果你真的想打印怎么办-n
?有些实现可能实际上因系统而异设置在 shell 或环境中。 - 它以特殊的方式处理(或可能不会处理)某些字符序列(特别是反斜杠转义字符)。在密码中包含这些字符并非完全不合理,POSIX 不保证 echo 的行为(其行为具体不明确的) 如果第一个参数是
-n
或其任何参数包含反斜杠。
如果您感兴趣的话,上面关于使用 printf 而不是 echo 的问题的答案还有更多,以及更多阅读链接。