代码之家  ›  专栏  ›  技术社区  ›  Nits

SHA-1校验和验证?

sha
  •  0
  • Nits  · 技术社区  · 10 年前

    我正在下载 Download Android Studio and SDK Tools .上面写着 SHA-1 Checksum 并给出其值 f9b59d72413649d31e633207e31f456443e7ea0b .

    我的问题是:

    1) 它有什么用?

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

    我还可以对任何文件进行SHA-1校验和吗?

    1 回复  |  直到 10 年前
        1
  •  2
  •   jDo    10 年前

    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文件数据库中,以供以后使用和验证。”

    我不同意微软使用这个短语 “加密哈希” 在此背景下;也许这个程序已经过时了。无论如何,为了记录在案, 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 :)