哈希,英文是 hash ,本来意思是”切碎并搅拌“,有一种食物就叫 Hash ,就是把食材切碎并搅拌一下做成的。
什么是哈希函数?
哈希函数的运算结果就是哈希值,通常简称为哈希。哈希函数,有时候被也翻译做散列函数,根据维基百科定义,哈希函数要做的事情,是给一个任意大小的数据,生成出一个固定长度的数据,作为它一一对应的映射。
可靠的哈希算法要满足哪些条件才会成立?
安全:给定数据 M 容易算出哈希值 X ,而给定 X 不能算出 M ,或者说哈希算法应该是一个单向算法,无法逆推导。
独一无二:两个不同的数据,哪怕有丝毫的不同,也会算出截然不同的哈希值。
长度固定:给定一种哈希算法,不管输入是多大的数据,输出长度都是固定的。
为什么能找到两个不同输入却拥有相同的哈希?
因为如果哈希的长度是固定的,也就是取值范围是有限的,而输入数据的取值范围是无限的,所以总会找到两个不同的输入拥有相同的哈希。所以,哈希函数的安全性肯定是个相对概念。如果出现了两个不同输入有相同输出的情况,就叫碰撞,collision 。不同的哈希算法,哈希位数越多,也就基本意味着安全级别越高,或者说它的”抗碰撞性“就越好。
哈希函数的主要作用是什么?
哈希的独一无二性,保证了如果数据在存储或者传输过程中有丝毫损坏,那么它的哈希就会变。哈希函数的最常见的一个作用就是进行完整性校验( Integrity Check ),完整的意思是数据无损坏。
哈希有很多不同的称呼,有时候叫 Digest 摘要,有时候叫 Checksum 校验值,有时候叫 Fingerprint 指纹,其实说的意思差不多,也就是说哈希可以用来代表数据本身。
例如朋友给我传递一份数据,传完之后,我有一份,他手里也有一份,如果两份数据的哈希值是一样的,那么这两份数据的内容就是一样的,或者说可以认为传递过程中数据没有损坏,我手里拿到的数据是完整的,其实,我们从网站上下载文件也是同样的原理判断是否完整。所以说,哈希函数的基本作用就是给大数据算出一个摘要性的、长度固定的字符串,也就是所谓的哈希。哈希的作用主要是进行完整性校验。
哈希算法在国际上有哪些主流分类?
哈希算法有很多种,例如 md5 ,sha256 等等,但是它们总体上可以分为两大类,一类是普通哈希,另外一类是加密哈希,cryptographic hash function,业界可以找到的哈希算法是有很多种的,我们可以大致按照输出的哈希长度来分类,虽然哈希算法的安全性也不单单是跟哈希长度有关,但是一般哈希值越长也就是越安全。例如 CRC-32 的输出是32 bit,也就是32位的二进制数,表示成十六进制就是8位;MD5 算法的哈希是32位16进制数;SHA-256是256个 Bit ,十六进制表示就是64位。
这些算法可以分成普通哈希和加密哈希算法,两种算法之间没有特别明显的区别,实际中常见的哈希算法有 MD5 ,SHA-1 ,和 SHA-256 等等,例如本来 MD5 就是设计出来做加密哈希的,但是后来由于计算机的发展 MD5 出现碰撞的可能性就很大了,所以目前 MD5 只能当普通哈希用,用来做数据校验,而SHA-1 曾经是加密哈希算法,但是目前已经被除名,也只能做为一种安全度更高的校验算法了。SHA-256 依然是广泛使用的加密哈希算法,在比特币生成地址以及 POW 工作量证明算法中都会用到。
加密哈希跟普通哈希的区别
主要体现在安全性上,一般原则是只要一种哈希算法出现过碰撞,就会不被推荐成为加密哈希了,只有安全度高的哈希算法才能用作加密哈希。在密码学领域,有两个算法都是把数据做输入,而输出是一段谁也看不懂的数据。其中一个就是哈希算法,另外一个是加密算法。注意,哈希算法和加密算法完全不同。首先哈希算法的输出长度是固定的,而加密算法的输出长度是跟数据本身长度直接相关的,第二,哈希是不可以逆向运算出数据的,而加密算法的输出是要能够逆向运算出数据的。
总之,哈希算法有很多种,长度越长的算法基本认为越安全。安全度低的哈希算法被认为是普通哈希算法,主要用来做完整性校验。安全度高的被称为加密哈希算法,会被用在加密算法中。
哈希函数的应用场景
1、网站安全注册及防泄漏
当我们提交用户名密码的时候,用户名被会直接保存到网站的数据库中,但是密码却不是直接保存的,而是先把密码转换成哈希,保存到数据库中的其实是哈希。所以,即使是公司后台管理人员,也拿不到用户的密码。这样,万一发生公司数据库泄露了,用户的密码依然是安全的,而当用户自己登录网站的时候,输入密码提交到服务器,服务器上进行相同的哈希运算,因为输入数据没变,所以哈希也不会变,登录也就成功了。
2、区块链和加密货币
比特币地址生成的时候,就用到了 SHA-256 算法,POW 也就是工作量证明,用的也是这个算法。
本笔记挖自区块链运营研究社第5期嘉宾Jason(CSDN)分享
关注通识经济和加密经济,输出笔记、思考、文章
正在日更挑战中,您的关注、喜欢、评论都是我坚持的动力