SHA-1校验和验证?

时间:2016-04-06 07:30:55

标签: sha

我正在下载Download Android Studio and SDK Tools。写了SHA-1 Checksum,其值为f9b59d72413649d31e633207e31f456443e7ea0b

我的问题是:

  

1)它有什么用?

     

2)如何在Window和linux上测试和验证它?

我还可以为任何文件制作SHA-1校验和吗?

1 个答案:

答案 0 :(得分:2)

  

1)它有什么用?

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

  

2)如何在Windows和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

微软显然提供The File Checksum Integrity Verifier用于同一目的。我在Linux上并没有测试它,但描述说:

“文件校验和完整性验证程序(FCIV)是一个命令提示实用程序,用于计算和验证文件的加密哈希值.FCIV可以计算MD5或SHA-1加密哈希值。这些值可以显示在屏幕或保存在XML文件数据库中供以后使用和验证。“

我不同意微软在此上下文中使用短语“cryptographic hash”;也许这个程序已经过时了。无论如何,为了记录, MD5和SHA1不是加密安全散列算法。但是,它们可以很好地进行快速文件完整性检查。

  

我还可以为任何文件制作SHA-1校验和吗?

你的确可以。实际上,如果没有计算计算机上的哈希值,就无法验证文件完整性 - 这是流程的一部分。 要在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

如下所示,它也适用于字符串。 -n之后的echo选项会删除换行符,否则该换行符将成为字符串的一部分并导致错误的散列。

$ echo -n "some_string" | sha256sum
539a374ff43dce2e894fd4061aa545e6f7f5972d40ee9a1676901fb92125ffee  

如果您运行服务器并想要进行密码登录,则通常不会存储实际密码,而是存储密码的哈希值。在这种情况下,在散列之前向密码添加salt并使用当前推荐的散列算法 - bcrypt是2016年的不错选择。

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

  • “(...)唯一标识(...)”是一种过度陈述。 Here's why。这世界上没有任何东西是完美的 - 除了one-time pads:)