我可以从终端检查文件的 md5sum 哈希值,
$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file
但困难的部分是将哈希值与精确值进行比较。
对于大量文件,任何人都很难将 32 个字符的输出与原始/精确的哈希值进行比较。首先,这项工作会非常单调,而且错误范围很大。
是否可以自动化比较过程,最好在 CLI 中?
答案1
例如我有一个名为 的文件test_binary
。
文件测试的 MD5 值为ef7ab26f9a3b2cbd35aa3e7e69aad86c
要自动测试它,请运行以下命令:
$ md5sum -c <<<"ef7ab26f9a3b2cbd35aa3e7e69aad86c *path/to/file/test_binary"
test_binary: OK
或者
$ echo "595f44fec1e92a71d3e9e77456ba80d1 filetohashA.txt" | md5sum -c -
引自 男人
-c, --check
read MD5 sums from the FILEs and check them
引自维基百科
注意:每个要比较的 md5sum 值和文件名之间必须有两个空格。否则,将导致以下错误:“未找到格式正确的 MD5 校验和行”。
您也可以从文件中读取 md5 哈希值
$ md5sum -c md5sum_formatted_file.txt
预期文件格式为:
<md5sum_checksum><space><space><file_name>
关于MD5*
和<space>
哈希值之后的内容。man 中有一些注释:
When checking, the
input should be a former output of this program. The default mode is
to print a line with checksum, a character indicating input mode ('*'
for binary, space for text), and name for each FILE.
以下是链接堆栈溢出我在哪里找到了问题的答案,为什么我们有时要区分binary
文件和text
文件。
答案2
一种可能性是使用实用程序CFV
sudo apt-get install cfv
CFV 支持多种类型的哈希,以及测试和哈希文件创建。
# List the files
$ ls
test.c
# Create a hash file
$ cfv -tmd5 -C
temp.md5: 1 files, 1 OK. 0.001 seconds, 302.7K/s
# Test the hash file
$ cfv -tmd5 -T
temp.md5: 1 files, 1 OK. 0.001 seconds, 345.1K/s
# Display the hash file
$ cat *.md5
636564b0b10b153219d6e0dfa917d1e3 *test.c
答案3
是的,*
此命令需要星号。请看此示例。
这是二进制文件,假设正确的 md5sum 值是exampleofcorrectmd5value00000000
(32 个十六进制字符)
[root@Linux update]# ls -lh
total 137M
-rw-r--r-- 1 root root 137M Nov 5 13:01 binary-file.run.tgz
[root@Linux update]#
-c,--检查
从文件中读取 MD5 值并检查
如果 md5sum 值与二进制文件匹配,您将获得此输出
[root@Linux ~]# md5sum -c <<< "exampleofcorrectmd5value00000000" *binary-file.run.tgz"
binary-file.run.tgz: OK
[root@Linux ~]#
这是当 md5sum 值不匹配时
[root@Linux update]# md5sum -c <<< "exampleofwrongmd5value0000000000 *binary-file.run.tgz"
binary-file.run.tgz: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
[root@Linux update]#
如果没有星号*
,即使 md5 值正确,您也会收到以下错误消息
[root@Linux ~]# md5sum -c <<< "exampleofcorrectmd5value00000000 binary-file.run.tgz"
md5sum: standard input: no properly formatted MD5 checksum lines found
[root@Linux ~]#
另外,如果 md5sum 中没有 32 个十六进制字符,您也会收到相同的错误消息。在此示例中,它只有 31 个字符。
[root@Linux ~]# md5sum -c <<< "exampleofmd5valuelessthan32char *binary-file.run.tgz"
md5sum: standard input: no properly formatted MD5 checksum lines found
[root@Linux ~]#
解决许多文件的问题
如果您有许多文件并且想要自动化该过程,您可以按照以下步骤操作:
user@Ubuntu:~$ ls -lh
total 12K
-rw-rw-r-- 1 user user 4 Nov 5 14:54 file-a
-rw-rw-r-- 1 user user 4 Nov 5 14:54 file-b
-rw-rw-r-- 1 user user 4 Nov 5 14:54 file-c
user@Ubuntu:~$
为每个文件生成md5sum并将其保存到md5sum.txt
user@Ubuntu:~$ md5sum * | tee md5sum.txt
0bee89b07a24ae27c83fc3d5951213c1 file-a
1b2297c171a9a450d184871ccf6c9ad4 file-b
7f4d13d9b0b6ac086fd68637067435c5 file-c
user@Ubuntu:~$
要检查所有文件的 md5sum,请使用以下命令。
user@Ubuntu:~$ md5sum -c md5sum.txt
file-a: OK
file-b: OK
file-c: OK
user@Ubuntu:~$
这是 md5sum 值与文件不匹配的示例。在这种情况下,我将修改file-b
内容
user@Ubuntu:~$ echo "new data" > file-b
user@Ubuntu:~$
看,这是错误消息。希望这能有所帮助。
user@Ubuntu:~$ md5sum -c md5sum.txt
file-a: OK
file-b: FAILED
file-c: OK
md5sum: WARNING: 1 computed checksum did NOT match
user@Ubuntu:~$