Hash函数加密算法(一)

一、使用密码学的目的:

    保密性:防止用户的标识或数据被读取。 l

    身份验证:确保数据发自特定的一方。 

    数据完整性:防止数据被更改。

二、加密算法的分类:

   1、对称加密

       采用对称秘钥的加密系统加密、解密过程均采用同一把秘钥,通信双方必须同时获得这把钥匙进行加密解密操作。

       常见对称加密:DES\3DES\AES

   2、非对称加密

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

       常见的非对称算法:RSA\DSA\ECC

    3、哈希函数加密算法

        无需借助任何秘钥,主要用于针对前两者加密过程中需要保护的部分提供完整性、防伪造的支持。

       常见的哈希加密算法:MD5SHA-1SHA-2SHA-256SHA-X(系列)

 三、哈希算法

1、哈希

   将数据打乱混合,通过散列算法,重新创建一个叫做散列值的指纹,通常用一个短的随机字母和数字组成的字符串表示散列值。
2
、哈希算法的特性

   1)单向不可逆

    哈希(Hash)算法是一种单向密码体制,只有加密过程,没有解密过程

   2)可重复性

     相同输入经过同一哈希函数得到相同散列值,但并非散列值相同则输入结果相同。

     java中使用equals方法 java中的equalshashcode方法, java中用hashcode计算散列值,另外使用equals方法进行对比,返回true才能表示该对象为同一对象。

    	String result = new String();
    	String result2 = new String();
    	result="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-space:pre">	</span>true
<span style="white-space:pre">	</span>46790767
<span style="white-space:pre">	</span>46790767
可见,针对同一类型对象,对象值相同,也就是散列函数的输入相同,输出的散列值也相同。对象的引用相同,但如果对象值不同,也就是指向不同的heap空间,计算出不同的散列值。

   3)抗冲突性

    不同的输入数据,经过同一散列函数,产生的散列值一定不相同。相同则产生哈希冲突(详见博主前面的博客更新)。

2、实现一个哈希算法

    哈希算法有多重实现思路和方式,例如加法哈希、位运算哈希、乘法除法哈希等。

    加法哈希是将每个输入循环叠加构成最后的哈希结果,prime 为任意质数

<span style="white-space:pre">	</span>static int additiveHash(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 += 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、哈希加密算法

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

2、哈希加密算法的过程

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

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

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

3、应用:

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

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


  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值