前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >彻底掌握哈希算法,不再似懂非懂!

彻底掌握哈希算法,不再似懂非懂!

作者头像
城市中的游牧民族
发布2020-09-18 17:15:04
1.2K0
发布2020-09-18 17:15:04
举报
文章被收录于专栏:前端真相前端真相

一、介绍及原理

1.1 简介

哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。比如Java字符串的hashCode()就是哈希算法,输出是固定的4字节(32位二进制数)int整数,以16进制(一位数表示为4位二进制)表示,因此表达为类似0x7a9d88e8这种八位数的形式,即32除以4等于8。当然不是所有输出都会带0x前缀,但是对我们看到输出的字符串有 e、a、f 等字母就应该自然而然地想到是十六进制。

最简单的哈希算法就是取模。

1.2 哈希算法特性
  1. 相同的输入一定得到相同的输出;
  2. 不同的输入大概率得到不同的输出。根据抽屉原理,输入数据存在无限可能,而输出有固定范围,因此一定会存在不同输入得到相同输出的情况,即哈希碰撞,碰撞越多,算法越不可靠;
  3. 输入数据(文件、字符串等)的细微变化能导致输出的巨大变化;
  4. 不可以根据输出值推导出输入值,只能暴力破解;
  5. 执行效率高,哪怕输入是长文本。
1.3 作用

哈希算法的目的就是为了验证原始数据是否被篡改。

1.4 常见哈希算法
  • SHA1
  • SHA2,一系列算法的统称,包括sha256等
  • md5:现已不够安全

二、如何解决哈希碰撞?
2.1 链地址法
链地址法
链地址法

三、应用

3.1 比较文件是否安全、完整

不如在一些官网下载软件包,对应版本会有唯一一个哈希值,如下图:

在这里插入图片描述
在这里插入图片描述
3.2 安全加密

比如加密用户密码。 不要在数据库明文保存用户密码,防止内部人员或者黑客窃取。应该保存密码的hash值,同时为了避免彩虹库的碰撞,还应该给每个用户密码加不同的盐(防止密码相同用户因为一个用户密码被破解而同时遭殃),即保存 hash(password +salt)计算后的值。

比如 HTTPS、CA 证书

3.3 区块链

也可以归为安全领域,但是值得单独拿出来讲述。

3.4 其它

这里就可以展开脑洞啦。

比如涉及到版权问题,比如图片。根据文件内容的哈希值判断是否是相同文件,修改文件名称和时间没有用,即使该文件在不同计算机间拷贝,哈希值的计算是针对文件流,即文件内容。

比如上传大文件到百度网盘时,感觉是秒传。

比如上传大文件到服务端的断点续传(避免重复上传)。

参考链接:

  1. https://www.liaoxuefeng.com/wiki/1252599548343744/1304227729113121
  2. https://www.cnblogs.com/sunsky303/p/11865321.html
  3. https://juejin.im/post/6844904205312868366#heading-6
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、介绍及原理
    • 1.1 简介
      • 1.2 哈希算法特性
        • 1.3 作用
          • 1.4 常见哈希算法
            • 二、如何解决哈希碰撞?
              • 2.1 链地址法
              • 三、应用
                • 3.1 比较文件是否安全、完整
                  • 3.2 安全加密
                    • 3.3 区块链
                      • 3.4 其它
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档