当前位置:首页 > 哈希资讯 > 正文内容

浅谈哈希算法

1个月前 (05-31)哈希资讯122

这篇文章算是极客时间上,王争老师开设的《数据结构与算法之美》的课程里面的关于哈希算法的整理和思考。

言归正传,哈希算法是在计算机软件领域运用非常广泛的算法,也同时是非常重要的算法,什么是哈希算法,哈希算法也叫散列算法,Hash算法,简单来说就是通过一个函数将任意长度的二进制串(计算机里面二进制串可以是文字,图片,视频)映射(计算输出)成固定长度的二进制值串,这个函数就称为hash函数,这个映射得到的二进制串也叫哈希值,常用的Hash算法有MD5(Message Digest algorithm 5,信息摘要算法)和SHA(Secure Hash Algorithm,安全散列算法)。 哈希算法一般具有以下的特点:

1)哈希算法得到的值是固定长度的二进制串。

2)哈希算法非常敏感,两个具有微小差异的二进制串映射后的哈希值会完全不同。

3)从哈希算法的值很难推导出原始的报文信息。

4)哈希算法的执行的效率一般都要求很高,要快速计算出hash值。

5)很难找到两个不同的值,但是哈希值是一样的数据。

基于哈希算法的特点,哈希算法的应用说明如下:

1)用密码的哈希值当作用户的密码使用。

也就是常说的哈希加密,这里面说加密是不准确的,因为加密就存在这解密,而从哈希值是无法推导出原始密码的;

方法就是在后台的数据库中不直接保存用户的密码,而是保存用户密码的哈希值,用户登录的时候再通过密码的哈希值和数据库里面的保存的哈希值对比,如果一致就说明用户的密码是对的;

实际上,这样仍然是不安全的,因为如果数据库被黑客脱库(意思是把数据库内容盗走),黑客虽然无法通过哈希值得到用户的真实密码,但是黑客可以通过对简单的密码计算哈希值再和数据库里面的哈希值一一比对,如果比对一致就可以当这个用户的密码是这个简单密码,黑客有强大的常用密码库,通过这种方法,简单的密码很容易被破解,再利用这个用户名和密码到其他网站尝试登录(这个俗语叫撞库),从而盗走用户信息。 基于以上特点,在真正保存密码的时候,不会直接用密码的哈希值,而是在密码上加点“盐”,再进行哈希计算,比如可以用一个固定的字符串拼接在密码的后面,做哈希,或者干脆用用户名的几位拼接密码,然后做哈希。

2)用作唯一标识

既然哈希算法是对信息的摘要,而且很难找到不同的信息,但是哈希值相同的情况,那么在一些场合就可以用这个哈希值来表示复杂的信息,

举个例子,你在建一个网盘系统,网盘系统上保存着大量的图片,为了节省空间,要对重复的内容只保留一份,如何做到那,最简单的办法,假如要保存一张图片,在保存之前,对现存的网盘中的图片和你要保存的图片做一一对比,如果一致将不保存同样的图片,只做个链接;

但是网盘中的图片这么多,一一比对图片实在是太浪费时间,有没有更好的办法那,有个简单的办法就是在保存图片的时候同时保存这个图片的hash值,另外一张图片也要上传到网盘的时候,这时候对这张图片,也许只是这张图片的头200字节,尾部200个字节的数据做哈希计算,如果计算出来的哈希值已经在现有的网盘中了,那就挑出相同hash值的图片,做一一比对,因为哈希算法还存在着冲突的可能,所谓的冲突就是不同的数据,计算出相同的哈希值来,所以要对数据再做进一步的一一字节的比对。

这个我们在利用qq传送离线文件的时候也应该深有体会,有的几个G的文件可以秒传,原因我猜想qq系统通过比对哈希值判断出来这个文件在qq的临时中转空间上已经存在,所以只需要建个链接即可,无需真正上传,所以快。

3)散列函数

在计算机的大部分语言中,有一种性能很好的数据结构就是哈希表,可以在O(1)的时间完成数据的查询,插入,删除操作(当然具体性能是不是O(1),还要看具体的情况),性能非常好。 底层原理是,哈希表这种数据结构一般是一种数组+链表的组合,通过对Key值做哈希计算,然后计算的结果对数组的总长度区域,就知道这个数据应该放入到那个数组的槽中,如果存在了hash冲突,即两个不同的Key计算出相同的hash值,那么就通过链表的形式,将数据串联在链表中(当然解决hash冲突的办法还有二次探测法,也不一定用链表,也许是红黑树,也许就保存在数组的空闲位置中)。 由于数组高性能地支持按照下标访问数据,而且数组是对缓存友好的,所以可以通过这种结构支持高性能的增删改查操作。

4)安全校验

所谓的安全校验,这里面应该算是完整性校验,大家应该都有下载软件的经历,在下载软件的时候,特别是在国外的网站下载软件,一般都有校验码,以Solr这个搜索软件为例:

浅谈哈希算法

如果点击PGP会得到: -----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEE5YpvTVsrSKxm1eU71PGBiBpC+eYFAl0xwkMACgkQ1PGBiBpC +eZ/ag//bFEPdSneF3SpId6tA5GemAJGiVDGCgxNc/kp7I/3ejyA/LPwozT5o2fa ZBI/+rOKeEcEDWcJuppD40zNE35l+BHtXaJTNoZqEWbcrUULb9Aw61LKjllSQdEv 1gq8juFYcfofShbx4YxT2Zi/kz0A7xnS4GB7ycQ5TW3jLC67gkSqepmYrmPo4m/b bucCXfhnwxT+SCA1v/C/AFmbKVZx0lUecwSbfA8b/vMR8xV9p18bDJOJk5MOUSNc uGzjoBY7RolCMMXQoc1QXchieUhYDZlYFBoaK+dFxACB94ve4zWx7C8LzrU4R6gm oCM2v6rvVeLxiGnCSNGBlBokrvDJpS7KdX1WYAz/XPUuDgroCmNDYoHzz6SkSY0X 4Kyly852D6dMimxVk7R4ve696inSBzJ8GwhLGHOdMjpSFNEZxDmTTFfOx/T7GMzq 67G9zZtfwqw0g0ZJbUkD7hFaAbkkEyrQjmnirA8HCxK4ntEcFd6d4YOK5JOvcH21 yH5NOXO9Kzk3JH318wMhbT0d0DZDU8kwP2kmuzoGQ+WqAQdNmx9GA0S9GPD3dkSa erooMio4hxGMGLqEf2vx49SH4MX/PQaP6kWbDyB6i8FnFDl30lBtnX1qKikblm1T 04niKdx9UZkz6e+fz19mlUiO1sTcDV1ZygzRfhv37IFuQSFme98= =S6/i -----END PGP SIGNATURE-----

如果点击SHA512会得到一串数字:

7f53c99905bb4bd3b5fecee43a0b511d2d158b0830d494e1ab2cbc4bcae4a0fed4d21348f4e1f3c7675640b04c310fc3d53f87199a65910a552249818de6f51b

这两者起到的作用就是对solr这个软件的完整性校验,当然PGP更复杂,算是数字签名,这个我有时间再写一篇文字来介绍。 完整性校验的目的是为了防止网上的黑客对发布的软件做修改,例如在软件中植入木马等,所以利用哈希算法对数据敏感的特性,一旦软件发生轻微的改动,计算出来的哈希值都是完全不同的。我们下载软件后可以通过工具计算这个软件对应的哈希值,如果和官网中的哈希值不一致,那么说明软件一定被修改过,可能含有木马,不要使用;当然你可能会说,如果黑客连这个校验码也改了那,那不就校验不出来了吗,这就是数字签名要防止的问题了。

好了今天就聊到这里,下次接着聊。

祝大家一切都好!


扫描二维码推送至手机访问。

版权声明:本文由数字哈希发布,如需转载请注明出处。

本文链接:http://www.86estate.com/post/23.html

分享给朋友:

“浅谈哈希算法” 的相关文章

关于哈希算法,必须了解这三点

关于哈希算法,必须了解这三点

安全性是实现区块链系统功能的基础,也是目前阻碍区块链应用推广的因素之一。密码学是信息安全的基石,以很小的代价给信息提供一种强有力的安全保护,广泛应用于政治、经济、军事、外交和情报等重要领域。1 定义哈希算法(Hash Algorithms)也称为散列算法、杂凑算法或数字指纹,是可以将任意长度的消...

关于哈希的一切,都在这里了

关于哈希的一切,都在这里了

上一节,我们一起学习了,在Java中如何构建高性能队列,里面牵涉到很多底层的知识,不知道你有Get到多少呢?!本节,我想跟着大家一起重新学习下关于哈希的一切——哈希、哈希函数、哈希表。这三者有什么样的爱恨情仇?为什么Object类中需要有一个hashCode()方法?它跟equals()方法有什么关...

哈希值,万物的编号,区块链的基础

哈希值,万物的编号,区块链的基础

在区块链浏览器中,可以看到,每一个区块,都有区块哈希值。哈希值是什么意思?以人为例,要分辨两个人是否是同一个人,不能靠姓名,因为姓名的重复率太高。最好的办法,是给每个人一个唯一的编号,比如身份证号。身份证号由区位编码+出身年月日+次序+验证码组成,嵌入了地域类别和时间类别,解决了人的重复问题。可人的...

哈希值的定义与应用

哈希值的定义与应用

什么是哈希值哈希值就是文件的身份证,不过比身份证还严格。他是根据文件大小,时间,类型,创作者,机器等计算出来的,很容易就会发生变化,谁也不能预料下一个号码是多少,也没有更改他的软件。哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的...

哈希娱乐MASS打造区块链杀手级应用

哈希娱乐MASS打造区块链杀手级应用

目前市场大盘牛熊不明,全球币圈都在做调整的时候,只有区块链游戏和Gaming在逆流而上。据可查数据显示,早在2017年行业还在讨论如何将Dapp落地的时候,游戏行业就诞生了现象级的产品。现如今行内的主要用户也都集中在区块链游戏领域,可想而知,Block-chain+Game有多么的受欢迎。为什么在区...

哈希世界区块链游戏开发 区块链游戏沙盒开发 区块链游戏开发工作

哈希世界区块链游戏开发 区块链游戏沙盒开发 区块链游戏开发工作

作为区块链游戏开发人员,我们密切关注整个行业发展动态。哈希世界的创建者贾英昊是清华大学工业工程系的博士,他的职位是北美区块链协会的一名资深研究员。具有深入的研究及区块链项目和技术的丰富经验,并在行业核心媒体上发表了多篇专栏文章;团队拥有区块链技术实现和项目落地经验,中心成员毕业于清华大学、北京大学等...