哈希算法就是把任意长度的输入变换成固定长度的输出,每个字节都会对输出值产生影响,且无法通过输出逆向计算得到输入。
哈希算法主要包含构造函数及冲突解决两部分内容。
哈希算法的构造函数准则较为简单、均匀,即构造函数能够快速地计算出哈希值,同时构造函数能将关键字集合均匀地分布在输出地址集{0,1,…,n-1}上,保证冲突的可能性最小。
常见的构造方法包括:直接定址法、数字分析法、平方取中法、折叠法、随机数法、除留余数法等。
Hash,generally translated as hash or transliterated as hash,is generally called hash function.It is the processing of hash algorithm of input(also known as pre mapping pre image)of any length into output of fixed length,and the output data can be called hash value or hash value.This conversion is a kind of compression mapping,that is,a reasonable compression process.The space occupied by the output hash value is much smaller than the input space,but different inputs may be hashed into the same output.In other words,the output value is unique,but it is impossible to find the one-to-one corresponding input value.
应用方向
由于散列函数应用的多样性,它们经常是专为某一应用而设计的。
错误校验
使用一个散列函数可以很直观地检测出数据在传输时发生的错误。在数据的发送方,将散列函数应用于未发送的数据中,并将计算结果和原始数据一同发送。那么,在数据的接收方,将接收到的数据利用相同的散列函数进行处理,如果两次散列函数计算出来的结果不同,那么就说明数据在传输的过程中出现了差错。这就叫做冗余校验。
信息安全
Hash算法是现代密码体系中保密程度最高的一种方式。由于非对称算法既费时又费力的弊端,所以在数字签名协议中,单向散列函数完全的取代了传统的加密方式。
区块链技术也正是看中了它仅可“单向”操作的这一特性,才将其收入麾下,来对整个区块链基于底层区块所延伸出来的所有区块进行校验,以保证后续上链区块的准确性和吻合性。
哈希离散性就是我们两个非常相近的文件,或者是我们两个只相差一位数的一个长数据,我们计算出来的哈希它的数值是天壤之别,是没有任何相似地方的,哈希的离散性主要是为了规避一些有特征的攻击。
如果们的两个文件相差只有那么一丢丢,如果计算出来的哈希也很相近,它是更容易遭受到攻击的,所以正常的哈希它有这三个特点,哈希它的长度是32个字节,每个字节是八位数,现在通用的哈希都是256位数字,哈希的数值就是0-2的256次方,那2的256次方大概是多大,它比全宇宙的原子数量还要多。