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

2ha*_*med 234 command-line md5sum

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

例如,我想要abcdefg散列字符串。目前md5sum命令只接受文件名作为输入。我只想输入以下行并完成所有操作。

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

jfm*_*ier 318

你也可以这样说:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -
Run Code Online (Sandbox Code Playgroud)

它基本上做与@enzotib 描述的相同的事情,但可能更简单一些。

  • 为什么末尾有空格和破折号? (26认同)
  • 请注意,`-n` 是强制性的。没有它,您的哈希将完全错误,因为它包含换行符。 (20认同)
  • 如果我错了,请纠正我,但我认为这是因为 MD5sum 应用于数据流,而不是读取文件内容,文件内容具有与其关联的名称。 (4认同)
  • @alper `echo -n 欢迎使用 | md5sum | awk '{print $1}'` 将采用由空格分隔的第一个“列”。你也可以使用 `cut`。 (4认同)
  • 您还想更新示例结果,因为 7803ffca... 是结果 *with* 添加的换行符。上述命令的正确结果是`83218ac34c1834c26781fe4bde918ee4 -` (2认同)
  • 我怎么能忽略最后的`-`。@jfmessier (2认同)

enz*_*tib 72

很简单,它接受标准输入,所以

md5sum <<<"my string"
Run Code Online (Sandbox Code Playgroud)

为避免 shell 添加的尾随换行符:

printf '%s' "my string" | md5sum
Run Code Online (Sandbox Code Playgroud)

  • +1 正确使用 `printf`。如果你想得到不带 `-` 的总和,输入 `| 剪切 -d ' ' -f 1`。用法示例:`sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)` (5认同)
  • 似乎使用 `&lt;&lt;&lt;` 运算符向 md5sum 发送换行符! (2认同)

ty4*_*008 36

$ echo -n 123456 | md5sum | awk '{print $1}'
e10adc3949ba59abbe56e057f20f883e
Run Code Online (Sandbox Code Playgroud)

你可以创建一个shell脚本。

例如,脚本名称为 md5.sh:

#!/bin/bash

echo   -n   $1 | md5sum | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)

权限执行:

 chmod +x md5.sh
Run Code Online (Sandbox Code Playgroud)

然后:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e
Run Code Online (Sandbox Code Playgroud)

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

$ echo -n 123456 | md5 | awk '{print $1}' 
e10adc3949ba59abbe56e057f20f883e
Run Code Online (Sandbox Code Playgroud)

  • awk 的替代方案: `cut -d ' ' -f 1` (3认同)
  • 我创建了一个函数`md5() { echo -n $1 | md5 总和 | awk '{print $1}'; }` 在 .bashrc 中,然后我可以在命令行中使用 `$ md5 test`。感谢你的回答 (2认同)

小智 13

openssl md5 filename
openssl sha1 filename
Run Code Online (Sandbox Code Playgroud)

对于字符串管道使用 echo 的内容

echo -n 123456 | openssl md5
Run Code Online (Sandbox Code Playgroud)


psu*_*usi 10

完全不带参数运行 md5sum 将导致它从终端读取输入。输入或粘贴您想要的任何内容,完成后,按ctrl-d结束输入。

  • 是的,你也说得对。但是`ctrl+d` 需要按两次才能工作。 (2认同)

小智 5

我对--helpfor 的快速查看md5sum表明该命令:

md5sum -
Run Code Online (Sandbox Code Playgroud)

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

少打字,没有管道!并避免您的明文密码被记录在 shell 历史中!哇!

如果您不想要那个尾随 CR(如果您想对密码进行哈希处理,通常就是这种情况),请不要EnterCtrl+之前点击D,而是输入Ctrl+D两次。


sim*_*eco 5

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

我想明确指定哪些流行方法包含换行符,哪些不包含换行符。

以下是一些计算md5哈希值(不带尾随换行符)的示例(正确):

使用带有文本的文件:

$ echo -n "test" > test.txt
$ wc test.txt
0 1 4 test.txt
$ md5sum test.txt
098f6bcd4621d373cade4e832627b4f6  test.txt
Run Code Online (Sandbox Code Playgroud)

注意: -n in 的echo意思是:“不输出尾随换行符”。

echo与内联一起使用-n

$ echo -n "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -
Run Code Online (Sandbox Code Playgroud)

使用printf

$ printf "%s" "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -
Run Code Online (Sandbox Code Playgroud)

仅使用md5sum命令:

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

$ md5sum
test098f6bcd4621d373cade4e832627b4f6  -
Run Code Online (Sandbox Code Playgroud)

使用md5sum -命令:

(我们来写md5sum -,按Enter然后写字符串test,然后按双组合Ctrl+ d

$ md5sum -
test098f6bcd4621d373cade4e832627b4f6  -
Run Code Online (Sandbox Code Playgroud)

以下是一些计算带有尾随换行符的md5哈希值的示例(所以不正确):

使用带有文本的文件:

$ echo "test" > test_n.txt
$ wc test_n.txt
1 1 5 test_n.txt
$ md5sum test_n.txt
d8e8fca2dc0f896fd7cb4cb0031ba249  test_n.txt
Run Code Online (Sandbox Code Playgroud)

使用echo-n内联:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -
Run Code Online (Sandbox Code Playgroud)

此处使用字符串

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -
Run Code Online (Sandbox Code Playgroud)

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

(让我们写md5sum,按Enter然后写字符串test,然后再按Enter一次组合Ctrl+ d

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
Run Code Online (Sandbox Code Playgroud)

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

(让我们写md5sum -,按Enter然后写字符串test,然后再按Enter一次组合Ctrl+ d

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
Run Code Online (Sandbox Code Playgroud)