将字符串的 MD5Sum 输出到文件

将字符串的 MD5Sum 输出到文件

如何将 MD5 字符串的输出添加到文件中,例如将 Hello, world! 的 MD5 添加到文件 /home/documents/helloworld.txt

答案1

如果你不想散列尾随新队, 使用:

printf '%s' 'string' | md5sum >outfile

最常见的情况是,计算文件全部内容的哈希值,例如 MD5 和。您可以计算任何字符串的哈希值,但有一个问题:许多生成字符串的方法都会在末尾附加一个换行符。

因此,使用换行符:

$ echo 'Hello, World!' | md5sum
bea8252ff4e80f41719ea13cdf007273  -
$ md5sum <<<'Hello, World!'
bea8252ff4e80f41719ea13cdf007273  -
$ md5sum <<'EOF'
Hello, World!
EOF
bea8252ff4e80f41719ea13cdf007273  -
$ printf '%s\n' 'Hello, World!' | md5sum
bea8252ff4e80f41719ea13cdf007273  -

没有换行符:

$ printf '%s' 'Hello, World!' | md5sum
65a8e27d8879283831b664bd8b7f0ad4  -
$ echo -n 'Hello, World!' | md5sum
65a8e27d8879283831b664bd8b7f0ad4  -

在所有这些方法中,你可以重定向输出,md5sum例如在>outfile它旁边写入以写入outfile而不是您的终端。根据您的目标,任何一种方法都可能是合理的。但是,如果您的目标是计算Hello, World!(或您的字符串的任何内容)的 MD5 哈希值,而不是Hello, World!附加换行符,那么您一定不能使用任何附加换行符的方法。

如图所示,echo没有-n这里的字符串这里的文件,并且printf带有 会\n产生换行符,而不printf带有\necho则不-n产生换行符。请注意,如果您的字符串不包含任何%\字符(printf其第一个参数会特殊处理),您甚至可以这样写:

$ printf 'Hello, World!' | md5sum
65a8e27d8879283831b664bd8b7f0ad4  -

注意printf通常可取的是echo


最后,对于交互式使用,还有另一种方法可以做到:

  1. 运行md5sum(或重定向至md5sum >outfileoutfile)。
  2. 输入您的字符串。
  3. 如果你输入的字符串不是以换行符结尾,请按Ctrl+ D。这样会刷新缓冲区,即使你正处于一行的中间,并且缓冲区(可能)未满。
  4. Ctrl+D 再次。这会刷新缓冲区,但缓冲区为空,因此md5sum读取零字节。这是“文件结束”情况,因此md5sum停止读取并给出结果。

在实践中,这比我说的更简单、更快捷。它之所以有效是因为终端对Ctrl+有D特殊处理。(在极少数情况下,如果你想将该字符作为字符串的一部分逐字发送,你可以按Ctrl+ V,然后立即按Ctrl+ D。)

如果您的字符串以换行符结尾,则跳过步骤 3,因为缓冲区已刷新。也就是说,如果您按下的最后一个键是Enter(或者如果您粘贴了文本并且该文本以换行符结尾,因此您位于一行的开头),则只需按一次Ctrl+D而不是两次。

请注意,除了必须实际将字符串输入到终端之外,此方法是完全通用的。您的字符串中可以包含其他换行符。例如,您可以输入md5sum,然后Enter,然后hello,然后Enter,然后world,然后Ctrl+D两次,这将得到与 相同的结果printf 'hello\nworld' | md5sum

答案2

回显文本并通过管道传送到 md5sum。将输出重定向到文件:

echo "Hello, World!" | md5sum > "/home/user/documents/helloworld.txt"

编辑:正如@EliahKagan 指出的那样,这包括尾随换行符。请参阅他的很好的答案以寻求更好的解决方案。

相关内容