首页 > 编程知识 正文

hash函数的定义,构造哈希函数的方法

时间:2023-05-04 19:35:53 阅读:138228 作者:1880

一、使用密码学的目的:

机密性:防止读取用户的徽标或数据。 LL

身份验证:确保数据是从特定方发送的。

数据完整性:确保数据不被修改。

二、加密算法的分类:

http://www.Sina.com/http://www.Sina.com /

使用对称私钥的加密系统的加密、解密过程都使用相同的私钥,通信双方必须同时获得该密钥进行加密解密操作。

常用对称加密: DES3DESAES

http://www.Sina.com/http://www.Sina.com /

非对称加密系统中采用的加密解密私钥不同,加密的称为公钥,解密的称为私钥。 公钥加密私钥解密、私钥签名公钥验证

常见的不对称算法: RSADSAECC

http://www.Sina.com/http://www.Sina.com /

不使用私钥,主要用于为需要前两个加密过程保护的部分提供完整性和防伪支持。

常见的散列加密算法: MD5、SHA-1、SHA-2、SHA-256、SHA-X (

三.哈希算法

1

混洗并混合数据,通过哈希算法重新创建指纹,称为哈希值。 哈希值通常由短的随机字符和数字组成的字符串表示。

http://www.Sina.com/http://www.Sina.com /

1 )单向不可逆

哈希算法是一种只有加密过程而没有解密过程的单向加密方法。

2 )重复性

相同的输入经过相同的散列函数得到相同的散列值,但如果散列值不同,则输入结果相同。

java使用equals方法java的equals和hashcode方法,java使用hashcode方法计算散列值,并使用equals方法进行比较,返回true以返回对象相同的对象

String result=new String (; String result2=new String (; 结果=' 12121 '; result2='121211 '; system.out.println (result.hashcode () ); system.out.println (result2. hashcode (); String s='12121 '; String ss='12121 '; system.out.println(s.equals ) ss ); system.out.println(s.hashcode ); system.out.println(ss.hashcode () ); 返回结果:

span style=' white-space : pre '/span 46790767 span style=' white-space : pre '/span 1450513826 span style=' white span 46790767 span style=' white-space 3360 pre '/span 46790767中可以看出,对于相同类型的对象,对象的值相同;对象的引用相同,但对象

3 )抗碰撞性

根据输入数据,经过相同的哈希函数所产生的哈希值必然不同。 同样会发生散列冲突。 有关详细信息,请参阅更新博客前面的博客。

2、实现哈希算法

哈希算法有多种实现思路和方式,如机智笔、位运算哈希、乘法除法哈希等。

机智的笔在各输入循环的基础上构成最后的散列结果,prime为任意素数

span style=' white-space : pre '/spanstaticintadditivehash (string key,int prime ) span style=' white-space 3360 pre sticintintad

y.length(), i = 0; i < key.length(); i++)<span style="white-space:pre"></span>hash += key.charAt(i);<span style="white-space:pre"></span>return (hash % prime);<span style="white-space:pre"></span>}    位运算是采用移位、异或运算来充分混合输入元素

<span style="white-space:pre"></span>static int rotatingHash(String key, int prime)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>int hash, i;<span style="white-space:pre"></span>for (hash=key.length(), i=0; i<key.length(); ++i)<span style="white-space:pre"></span>hash = (hash<<4)^(hash>>28)^key.charAt(i);<span style="white-space:pre"></span>return (hash % prime);<span style="white-space:pre"></span>}

四、哈希加密算法

1、哈希加密算法

     哈希算法应用于加密学,将加密学领域的哈希算法称为哈希加密算法,常见的如上面提到的MD5,SHA-系列算法,每种哈希加密算法,均通过某种哈希函数进行迭代,将任意长度的消息输入,经过压缩生成“消息摘要”( MessageDigest)。

2、哈希加密算法的过程

   预处理(Preprocessing):消息填充、将消息分割成m个处理块、为哈希设置初始化值

   哈希计算(HashComputation):将预处理完成的数据生成消息摘要,利用对应的哈希函数、相关常熟生成哈希值(即散列值、摘要信息)。

   每种哈希加密算法根据初始化参数生成固定长度的摘要信息,例如SHA-256生成的摘要信息长度为128位。越长安全性越高。

3、应用:

    错误校正:在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。这就叫做冗余校验。

    例如在邮件反欺诈技术中的DKIM,邮件 body信息使用simple/relaxed散列函数计算出bh值,同原数据一同发送。数据接收方使用同样的simple/relaxed散列函数再一次对接收到的数据进行散列计算,对比两次散列计算的结果是否一致。一致则保证邮件在传输过程中未被篡改,确保消息的完整性。


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。