共计 716 个字符,预计需要花费 2 分钟才能阅读完成。
[root@controller ~]# echo -n "Hello, SM3中文" | openssl sm3
(stdin)= 0762db018b4cbe230bf620651eccbdb14a77239abd9995960881aedd203b181d
[root@controller ~]# vim 1.txt
[root@controller ~]# openssl dgst -SM3 1.txt
SM3(1.txt)= b86eb26d2914526649609c2b27da6d9df523ad2090b2df384247fb8d87298534
[root@controller ~]# cat 1.txt
Hello, SM3中文
可以看到对一个字符串直接做hash和对包含这个字符串的文件做hash得到的结果不同。为什么呢?
以下是chatGPT的回答,这里不深究了,有空看一下源码。
- 包含额外信息: 如果对文件进行哈希,文件可能包含一些额外的元信息,例如文件名、路径、时间戳等。这些额外的信息会影响哈希结果。
- 文件编码: 如果文件是文本文件,其编码方式可能影响哈希结果。不同的编码方式导致的二进制表示不同,因此哈希结果也会不同。
- 文件结尾符: 文本文件的行结尾符在不同的操作系统上可能不同。例如,Windows 使用回车符和换行符(\r\n),而类 Unix 系统使用换行符(\n)。这可能导致对于相同的文本内容,在不同系统上计算的哈希结果不同。
- 空白字符: 文件中的空白字符(例如空格、制表符等)可能在字符串哈希和文件哈希中的处理方式不同,从而导致不同的哈希结果。
- 文件元数据: 文件哈希通常会包括文件的元数据,如权限、所有者等。这些信息在字符串哈希中是不存在的,可能导致哈希结果不同。
正文完
确实结果会不相同,初步判断是因为文件hash和直接对字符串做hash的处理流程不同,后续有时间再继续看