如何直接从终端获取字符串的MD5哈希?

例如,我希望对字符串abcdefg进行哈希处理。当前,md5sum命令仅接受文件名作为输入。我只想输入以下行即可完成所有操作。

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f


如何实现?

评论

md5 -s abcdefg

不知道为什么这个论坛上有这个问题。它应该在Unix和Linux上,超级用户,但是在这里?我不确定。无论如何,它都有价值,无论它在哪里。

#1 楼

您也可以这样说:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -


它基本上执行与@enzotib描述的相同的操作,但可能会更简单。

评论


您还想更新示例结果,因为7803ffca ...是添加了换行符的结果。上面命令的正确结果是83218ac34c1834c26781fe4bde918ee4-

– Xanthir
15年5月27日在21:14



为什么最后会有空格和破折号?

– Keune
2015年12月2日,9:46

请注意,-n是必需的。没有它,您的哈希将完全错误,因为它包含换行符。

– Pithikos
16年2月8日在11:23

我怎么能忽略-最后。 @jfmessier

–警报
18年5月31日在13:04

@alper echo -n欢迎| md5sum | awk'{print $ 1}'将采用空格分隔的第一个“列”。您也可以使用cut。

–domdambrogia
20-11-20在6:13



#2 楼

很简单,它接受stdin,因此

md5sum <<<"my string"


为了避免外壳程序添加尾随换行符:

printf '%s' "my string" | md5sum


评论


给@messier和@enzotib投票;两者都属于我的“优雅简洁”类别。我倾向于在脚本中使用<<<“管道;在命令行中使用echo string win。

–汤姆
11年7月20日在17:01

+1可正确使用printf。如果您想要不带-的总和,请输入| cut -d''-f 1.示例用法:sum = $(printf'%s''some string'| md5sum | cut -d''-f 1)

– Lekensteyn
2011年7月21日在8:49

很奇怪,但是<<<运算符和printf函数为md5哈希给出了完全不同的结果! printf的结果是正确的!

–哈迈德·莫米尼(Hamed Momeni)
2011年7月21日15:30

似乎使用<<<运算符将换行符发送到md5sum!

–哈迈德·莫米尼(Hamed Momeni)
2011年7月21日在15:32

是的,正如我在第一个和第二个示例中所说的那样

– Enzotib
2011年7月21日在18:32

#3 楼

$ echo -n 123456 | md5sum | awk '{print }'
e10adc3949ba59abbe56e057f20f883e


您可以创建shell脚本。例如,脚本名称为md5.sh:

#!/bin/bash

echo   -n    | md5sum | awk '{print }'


/>权限执行:

 chmod +x md5.sh


然后:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e


如果您的系统是macOS。您需要修改以下脚本:

$ echo -n 123456 | md5 | awk '{print }' 
e10adc3949ba59abbe56e057f20f883e


评论


这太长了。

– Gucho Ca
16年5月12日,3:40

替代awk:cut -d''-f 1

– phil294
17年5月5日在6:13

我创建了一个函数md5(){echo -n $ 1 | md5sum | awk'{print $ 1}';在.bashrc中,然后可以在命令行中使用$ md5测试。感谢你的回答

–鲁本·本杰明(Ruben Benjamin)
19-2-20在14:34



较短的awk命令:'$ 0 = $ 1'

– Alex Stragies
19年7月29日在12:14

@AlexStragies是的

–ty4z2008
19年7月30日在2:26

#4 楼

openssl md5 filename
openssl sha1 filename


对于字符串管道,使用echo

echo -n 123456 | openssl md5


#5 楼

运行不带任何参数的md5sum会使它从终端读取输入。输入或粘贴所需的任何内容,完成后按ctrl-d结束输入。

评论


是的,你也是对的。但是ctrl + d需要按两次才能起作用。

–哈迈德·莫米尼(Hamed Momeni)
2011-09-30 13:57

@James,如果不跟换行符,是的。如果您在按Enter键后将其击中,则只需一次。当它不跟随换行符时,它只是强制到目前为止到目前为止在该行上键入的所有字符,而不是等待换行符。

–psusi
2011-09-30 14:42

#6 楼

我对--help的快速查询显示了以下命令:

md5sum -


然后将提示您进行简单的输入。输入一些文本,然后使用Enter键,然后使用Ctrl + D表示文件结尾,然后使md5sum吐出您输入的原始文本的MD5(包括Enter,它是CR,IIRC)。

输入少,无管道!并避免将您的明文密码记录在shell历史记录中!呜!

如果您不希望结尾的CR(通常是要散列密码的情况),请不要在Ctrl + D之前按Enter键,而要输入Ctrl + D两次。

#7 楼

在我的脚本中,我发现关于此问题,您应该了解两件事。


无论您执行echo "$myvariable"还是echo -n "$myvariable"
都没关系,但是您应该始终使用将doubleqoutes用于字符串,并始终使用相同的方法。如果不是这样,则不匹配。

在输出中总是出现尾随空格和破折号,如示例所示:

$ echo -n Welcome | md5sum
7803ffcaea43bb81a439fde13b29bc35  -



摆脱这些,仅保留代码7803ffcaea43bb81a439fde13b29bc35
执行:echo "$myvariable" | md5sum | cut -d" " -f1

评论


不要忘记这里的-n参数,以避免输出结尾的换行符,这将导致错误的md5:echo -n $ myvariable | md5sum |切-d“” -f1

– derFunk
15年12月3日在19:28

#8 楼

有许多示例可以执行此操作,但是其中一些示例并不等效,因为其中一些显式或隐式包含换行符,而另一些则不然。

我想清楚地说明哪种流行方式方法包括换行符,但不包括换行符。

这里有一些示例,用于计算md5哈希而没有尾随换行符(CORRECT):

使用带有文本的文件:

$ echo -n "test" > test.txt
$ wc test.txt
0 1 4 test.txt
$ md5sum test.txt
098f6bcd4621d373cade4e832627b4f6  test.txt


注意:-n中的echo表示:“不输出结尾的换行符”。

echo-n内联一起使用:

$ echo -n "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -


使用printf

$ printf "%s" "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -


仅使用md5sum命令:

(我们写md5sum,按Enter键,然后输入字符串test,然后按双组合键Ctrl + d)

$ md5sum
test098f6bcd4621d373cade4e832627b4f6  -


使用md5sum -命令:

(让我们写md5sum -,按输入然后输入字符串test,然后按双组合键Ctrl + d )

$ md5sum -
test098f6bcd4621d373cade4e832627b4f6  -


下面是一些使用尾随换行符计算md5哈希的示例(很不正确):

使用带有文本的文件:

$ echo "test" > test_n.txt
$ wc test_n.txt
1 1 5 test_n.txt
$ md5sum test_n.txt
d8e8fca2dc0f896fd7cb4cb0031ba249  test_n.txt


使用echo不带内联-n内联:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -


在这里使用字符串:

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -


仅使用md5sum命令,但在写入文本后使用Enter键:

(让我们写md5sum,按Enter键,然后输入字符串test,再按agaien Enter并一次组合Ctrl + d)

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -


使用md5sum -命令,但在写入文本后使用Enter键:

(让我们写md5sum -,按Enter然后输入字符串test,然后按agaien Enter键,然后按一下组合键Ctrl + d)

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -


#9 楼

就我而言,对纯字符串进行哈希处理的最佳解决方案是:
md5hash=$(echo -n "myhashedstring" | md5sum | head -c 32)

将导致2e8f8b94e488a2f442a55951862612aa