就是空间映射函数,例如,全体的长整数的取值作为一个取值空间,映射到全部的字节整数的取值的空间,这个映射函数就是HASH函数。通常这种映射函数是从一个非常大的取值空间映射到一个非常小的取值空间,由于不是一对一的映射,HASH函数转换后不可逆,即不可能通过逆操作和HASH值还原出原始的值,受到计算能力限制(注意,不是逻辑上不可能,前面的不可能是逻辑上的)而且也无法还原出所有可能的全部原始值。HASH函数运用在字典表等需要快速查找的数据结构中,他的计算复杂度几乎是O(1),不会随着数据量增加而增加。另外一种用途就是文件签名,文件内容很多,将文件内容通过HASH函数处理后得到一个HASH值,验证这个文件是否被修改过,只需要把文件内容用同样的HASH函数处理后得到HASH值再比对和文件一起传送的HASH值即可,如不公开HASH算法,那么信道是无法篡改文件内容的时候篡改文件HASH值,一般应用的时候,HASH算法是公开的,这时候会用一个非对称加密算法加密一下这个HASH值,这样即便能够计算HASH值,但没有加密密钥依然无法篡改加密后HASH值。这种算法用途很广泛,用在电子签名中。HASH算法也可进行破解,这种破解不是传统意义上的解密,而是按照已有的HASH值构造出能够计算出相同HASH值的其他原文,从而妨碍原文的不可篡改性的验证,俗称找碰撞。这种碰撞对现有的电子签名危害并不严重,主要是要能够构造出有意义的原文才有价值,否则就是构造了一个完全不可识别的原文罢了,接收系统要么无法处理报错,要么人工处理的时候发现完全不可读。理论上我们终于找到了在可计算时间内发现碰撞的算法,推算了HASH算法的逆操作的时间复杂度大概的范围。HASH算法的另外一个很广泛的用途,就是很多程序员都会使用的在数据库中保存用户密码的算法,通常不会直接保存用户密码(这样DBA就能看到用户密码啦,好危险啊),而是保存密码的HASH值,验证的时候,用相同的HASH函数计算用户输入的密码得到计算HASH值然后比对数据库中存储的HASH值是否一致,从而完成验证。由于用户的密码的一样的可能性是很高的,防止DBA猜测用户密码,我们还会用一种俗称“撒盐”的过程,就是计算密码的HASH值之前,把密码和另外一个会比较发散的数据拼接,通常我们会用用户创建时间的毫秒部分。这样计算的HASH值不大会都是一样的,会很发散。最后,作为一个老程序员,我会把用户的HASH值保存好,然后把我自己密码的HASH值保存到数据库里面,然后用我自己的密码和其他用户的用户名去登录,然后再改回来解决我看不到用户密码而又要“偷窥”用户的需要。最大的好处是,数据库泄露后,得到用户数据库的黑客看着一大堆HASH值会翻白眼。
没有关系。
1、稀疏哈希算法是一种只能加密,不能解密的密码学算法,可以将任意长度的信息转换成一段固定长度的字符串。
2、遗传算法是一种通过模拟自然进化过程搜索最优解的方法。该算法通过数学的方式,利用计算机仿真运算,将问题的求解过程转换成类似生物进化中的染色体基因的交叉、变异等过程。
哈希是一种加密算法,也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要。它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。 扩展资料
Hash算法的特点:
易压缩:对于任意大小的输入x,Hash值的长度很小,在实际应用中,函数H产生的Hash值其长度是固定的。
易计算:对于任意给定的消息,计算其Hash值比较容易。
单向性:对于给定的Hash值,要找到使得在计算上是不可行的,即求Hash的逆很困难。在给定某个哈希函数H和哈希值H(M)的情况下,得出M在计算上是不可行的。即从哈希输出无法倒推输入的原始数值。这是哈希函数安全性的基础。
抗碰撞性:理想的Hash函数是无碰撞的,但在实际算法的.设计中很难做到这一点。
有两种抗碰撞性:一种是弱抗碰撞性,即对于给定的消息,要发现另一个消息,满足在计算上是不可行的;另一种是强抗碰撞性,即对于任意一对不同的消息,使得在计算上也是不可行的。
高灵敏性:这是从比特位角度出发的,指的是1比特位的输入变化会造成1/2的比特位发生变化。消息M的任何改变都会导致哈希值H(M)发生改变。即如果输入有微小不同,哈希运算后的输出一定不同。