SHA-1 校验和验证?

SHA-1 Checksum verify?

我正在下载 Download Android Studio and SDK Tools。写了 SHA-1 Checksum 并且它的值给出了 f9b59d72413649d31e633207e31f456443e7ea0b.

我的问题是:

1) What is the use of it?

2) How to test and verify it on Window and linux?

我还可以生成任何文件的 SHA-1 校验和吗?

1) What is the use of it?

从本质上讲,散列是一种单向(不可逆)过程,它采用一些输入数据并生成一个固定长度的字符串(通常为十六进制),该字符串唯一* 标识该特定输入数据。 这非常有用并且有很多应用程序,但在您的情况下,它用于验证文件的完整性。网站上传文件的哈希值供全世界查看,当文件下载到您的计算机上时,您检查本地计算的哈希值是否与网站上显示的哈希值匹配。如果它们匹配,则文件完好无损,但如果不匹配,则您计算机上的文件与服务器上的文件不相同 - 很可能是因为它 damaged/altered 在传输中。

2) How to test and verify it on Windows and Linux?

至少在 *nix 系统上,有几种比较哈希值的方法。没有什么能阻止您手动检查两个散列的每个字符是否相等——当您只想检查单个文件时,这通常很快。无论如何,大多数哈希程序都有一个 -c 选项用于此目的,如果匹配则输出 "OK" 。要手动输入哈希和文件并将两者都传递给 sha1sum 进行比较,请执行以下操作:

$ echo "672d844c60553f9b3db9844dc29ddf49bc426f45" /bin/echo | sha1sum -c -
/bin/echo: OK

计算哈希值并制作包含哈希值和文件路径+文件名的文件(echo.sha1):

# calculate hash and write it along with the file path + file name to a file
$ sha1sum /bin/echo > echo.sha1

# see the contents of the file
$ cat echo.sha1 
672d844c60553f9b3db9844dc29ddf49bc426f45  /bin/echo

# do the comparison
$ sha1sum -c echo.sha1 
/bin/echo: OK

Microsoft 显然出于同样的目的提供了 The File Checksum Integrity Verifier。我在 Linux 上,还没有测试过,但描述说:

"The File Checksum Integrity Verifier (FCIV) is a command-prompt utility that computes and verifies cryptographic hash values of files. FCIV can compute MD5 or SHA-1 cryptographic hash values. These values can be displayed on the screen or saved in an XML file database for later use and verification."

我不同意微软在这种情况下使用短语 "cryptographic hash";也许程序已经过时了。无论如何,郑重声明,MD5 和 SHA1 不是加密安全哈希算法。但是,它们非常适合进行快速文件完整性检查。

Can I also make SHA-1 Checksum of any file?

你确实可以。事实上,如果不 在您的计算机上计算散列,就无法验证文件完整性 - 这是过程的一部分。 要获取 Linux/Unix 上文件的 sha1 总和(在本例中又是 "echo" 二进制文件),您可以简单地执行以下操作:

$ sha1sum /bin/echo
672d844c60553f9b3db9844dc29ddf49bc426f45  /bin/echo

还有其他 SHA 哈希长度:

$ sha512sum /bin/echo 
1f481804f114677efbfc1438b04e88af5be8507e098792b714939fcd346b7477fdb4ae0c53fd48e96d1031fc8d6e3d8c8d4c4c80e121f5c5a39d18c912b33a11  /bin/echo

MD5 长期以来一直用于同一目的,有时现在仍然如此(但是,同样,不要将 MD5 或 SHA1 用于加密):

$ md5sum /bin/echo 
482a44200637097351e30c80b1155c27  /bin/echo

正如您在下面看到的,它也适用于字符串。 echo 之后的 -n 选项去除了换行符,否则该换行符将成为字符串的一部分并导致错误的散列。

$ echo -n "some_string" | sha256sum
539a374ff43dce2e894fd4061aa545e6f7f5972d40ee9a1676901fb92125ffee  

如果您 运行 服务器并希望进行密码登录,您通常不会存储实际密码,而是存储密码的哈希值。在这种情况下,在2016年加一个salt to the password before hashing and use the currently recommended hashing algorithm - bcrypt是个不错的选择。

我可以继续讨论校验和与加密哈希与加密、彩虹表、哈希冲突等,但这超出了你的问题范围。

  • "(...) 唯一标识 (...)" 是夸张的说法。 Here's why. Nothing in this world is perfect - except one-time pads:)