搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 法币之子 > 【提升一度】浅析哈希算法

【提升一度】浅析哈希算法

法币之子 2019-03-15
举报

导读

比特币挖矿其实就是不断修改区块头部的随机数,然后通过计算区块的哈希值,知道这个哈希值满足特定标准的过程。那么到底什么是哈希算法?我们今天就具体来讲讲。


1-什么是哈希算法

在区块链世界里,我们常常听到这样的说法:“哈希一次”。我们来看看“哈希一次”究竟会发生什么。


我们拿30万字的《百年孤独》为例。“哈希一次”就是指通过哈希函数的算法,将这30万字压缩成几个字节的长度,具体长度则取决于不同的哈希算法。


这其中的30万字就是输入值,几个字节是输出值通俗地理解,这种“压缩”的过程就是“哈希一次”,压缩而成的输出值被称为“哈希值”


哈希算法是有损的,因此又叫散列算法最重要的特征在于不可逆推也就是说你无法通过输出值反推出输入值是什么。


比如MD5可以将几乎任意大小的文件映射到一串16进制值上面,假如是可逆的话,那么以后再也不用去买硬盘了,一个U盘走天下。


再比如你在船上丢了一个水壶。你知道它就在那里,在那个无边无际的海底。但只要打捞成本远远高于货物价值,那么这只水壶就会一直呆在那。


哈希算法在压缩过程中,就已经损失了绝大部分的细节,通过短短的几个字节不可能反推出文件本身。甚至无从得知这是不是一个文件。这就是不可能通过输出值逆推出输入值的原因。


举个例子,你天天用的手机指纹识别技术就是运用了哈希的原理。


你的指腹上包含了大量皮肤凹凸纹路的信息,可以想象,手机在第一次采集你的指纹时,要完整记录这些信息,显然是一项不可能任务。所以手机采集指纹时,其实是通过“哈希一次”,将你的海量指纹信息压缩到了比较小的数据单位记录下来,你最终录入手机的指纹相当于压缩之后的哈希值。


通过“哈希一次”,很少的信息量就可以代表你的指纹,因为无法逆推,所以原始的完整信息也可以得到保护。


不过,这种哈希并不是完美的。现实世界中并不存在完全一样的两枚指纹,即使DNA相同的同卵双胞胎,也因为后天环境和发展的不同而使皮肤凹凸纹路不尽相同,每一点“凹凸”都可以视作一种主人专属的身份信息。


但因为哈希算法抛弃了绝大多数指纹的“凹凸”信息没有记录,所以存在着两个人录入手机的指纹ID完全一致的情况。


比如按照Apple公开的说法,指纹ID重合的概率达到了1/50000,也就是说,每50000人中有一个人可以解开你的手机指纹。听起来有点可怕对不对?但因为共有指纹ID的人之间偶然发生关联的概率极低,所以基本还是保证了现在指纹识别技术的可靠性。这种哈希值重合的情况,就被称为“碰撞”。


现在,让我们回到区块链的世界。区块链可以理解成环环相扣的数据链,每一个区块头都记录了上一个区块的摘要信息,也就是上一个区块的哈希值。只要原始数据稍微改动一点点,得到的哈希值就会完全不同。


【提升一度】浅析哈希算法


2-哈希算法有什么用途


哈希算法可以检验信息是否是相同的,这样的优势可以节省重复文件传送的时间。



除此之外,哈希算法还可以检验信息的拥有者是否真实


比如,我们在一个网站注册一个账号,如果网站把密码保存起来,那这个网站不论有多安全,也会有被盗取的风险。但是如果用保存密码的哈希值代替保存密码,就没有这个风险了,因为哈希值加密过程是不不可逆的。


再者,哈希存取非常快。因为哈希是常数的时间复杂度啊,不管数据量是大还是小,只要用一个固定的算法算出哈希值就能直接找到结果。


举个例子:我这里有一万首歌。给你一首新的歌曲X,要求你确认这首歌是否在那一万首歌之内。


那么无疑,将一万首歌一个一个的比对肯定会非常慢。但如果存在一种方式,能将一万首歌的每首数据,浓缩到一个数字。如此就能知道歌曲X是否在那一万首歌中了。


所以一个最简单的哈希算法就是:让歌曲所占硬盘的字节数作为哈希码。这样的话,你可以让一万首歌按照大小顺序排列。当你想加入一首新的歌曲时,只要看看新歌的字节数是否和已有的一万首歌当中,某一首歌的字节数相同,就知道新歌是否在那原来的一万首歌之内了。


当然这个简单的哈希算法很容易出现两者同样大小的歌曲,这就是发生了碰撞。而好的哈希算法发生碰撞的几率非常小。


【提升一度】浅析哈希算法


3-哈希算法会不会被破解


从理论上说,哈希值是可以被获得的,但是对应的用户密码很难获得。


假设一个网站被攻破,黑客获得了哈希值,但仅仅只有哈希值还不能登录网站,他还必须算出相应的账号密码。


计算密码的工作量是非常庞大且繁琐的,严格来讲,密码是有可能被破译的,但破译成本太大,被成功破译的几率很小,所以基本是不用担心密码泄露的。


当然,黑客们还可以采用一种物理方法,那就是猜密码。他可以随机一个一个的试密码,如果猜的密码算出的哈希值正好与真正的密码哈希值相同,那么就说明这个密码猜对了。


密码的长度越长,密码越复杂,就越难以猜正确。如果有一种方法能够提高猜中密码的可能,那么可以算是哈希算法被破解了。


比如说,例如原本猜中的概率是1/万亿,现在增加到了1/1000。如果每猜一个密码需要1秒,按照之前的概率猜,直到地球毁灭都可能没猜中,但后者只需要1小时就足够了。在这样的情况下,哈希算法就算是被破解啦。


好啦,看到这里你是不是对哈希算法有了初步的了解?大家也不要过于担心你的账户以及资产被黑的风险,因为哈希算法仅仅只是比特币的原理算法,还有其他算法一同作用于比特币的运行,因此就算破解了哈希算法也并不能盗取你的账户信息。


往期 精彩回顾


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《【提升一度】浅析哈希算法》的版权归原作者「法币之子」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注法币之子微信公众号

法币之子微信公众号:fabizhizi

法币之子

手机扫描上方二维码即可关注法币之子微信公众号

法币之子最新文章

精品公众号随机推荐

举报