即兴的灵感

思维是一种艺术; 艺术需要灵感。

博客好友

最新评论

信息摘要算法实现之MD5算法

   在计算机安全领域,涉及到一个重要的范畴,那就是加密解密技术,加密解密技术的发展,为计算机安全提供了很大的保障,同时也随着破解技术的蔓延,对计算机安全带来了挑战,本文将个人之前对加密解密算法MD5的了解跟使用做个总结。
   在计算机加密算法当中,主要存在对称密钥体制、非对称密钥体制公钥体系、消息摘要、以及数字签名等大类型的算法。其中消息摘要有两个主要算法,下文作简要介绍消息摘要中的MD5算法以及对MD5算法的使用。
   在介绍MD5算法之前,先介绍下哈希函数。哈希函数(HASH)的运算原理为:任意输入一个任何长度的任何字符串,通过哈希函数运算之后返回一串固定长度的字符串,该字符串即称为HASH值,用于计算哈希值的单向HASH函数将用于产生目标信息摘要。使用HASH函数主要可以解决两个问题:第一,我们无法从经过哈希函数产生的哈希值反向计算出运算前的信息原文;第二,无法查找两个经HASH操作后生成相同HASH值的不同原文。因此利用哈希函数,在数字签名中就可以解决验证签名和用户身份验证、不可抵赖性的问题。 
   由于信息摘要能简要地描述了一份较长的信息或文件,因此信息摘要被称为“数字指纹”。对于某一个文件原文,产生的信息摘要是唯一的。同时,也由于我们无法逆向计算出原文,信息摘要也就不怕被公开,即使公开,也无法得到原文信息。
    MD2,MD4和MD5算法就是一种被广泛使用的HASH函数,是由Ron Rivest 设计的专门用于加密处理的单散列函数,通过MD5算法运算之后将产生一个128位(16字节)的信息摘要,除非使用暴力破解,没能找到其他好的方法,而一般计算机运算能力暴力破解时间一般需要一千多年之久,因此MD5算法是一种优秀的加密算法。
   以下是有关MD5算法的实现过程代码分析。

import java.security.MessageDigest;

public class MyMD5  {

    public MyMD5() {
    }

    /**
     *   计算一字符串MD5信息摘要
     *   @返回一个信息摘要
     */
    public static  String computeMD5(String inputStr) {

        MessageDigest md5=null;
        try {
            //创建MD5函数对象
            md5 = MessageDigest.getInstance("MD5");
        } catch (Exception e) {
            System.out.println(e.toString());
            e.printStackTrace();
            return "";
        }
        char[] charArray = inputStr.toCharArray(); //将字符串转换为字符数组
        byte[] byteArray = new byte[charArray.length]; //创建字节数组

        for (int i = 0; i < charArray.length; i++)
        //将字符转换为字节
         byteArray[i] = (byte) charArray[i];

        //将得到的字节数组进行MD5运算
         byte[] md5Bytes = md5.digest(byteArray);

        StringBuffer reMD5Str= new StringBuffer();

        for (int i = 0; i < md5Bytes.length; i++) ...{
            int val = ((int) md5Bytes[i]) & 0xff;
            if (val < 16)
                hexValue.append("0");
            hexValue.append(Integer.toHexString(val));
        }

       //返回信息摘要结果字符串
        return reMD5Str.toString();
    }
}

   以上即是有关JAVA加密算法中的信息摘要算法MD5的一些介绍跟使用与源码。

 
凤凰涅槃/浴火重生/马不停蹄/只争朝夕
     隐姓埋名/低调华丽/简单生活/完美人生

posted on 2008-12-04 23:28 poetguo 阅读(3165) 评论(2)  编辑  收藏 所属分类: 算法Algorithm JAVA

评论

# re: 信息摘要算法实现之MD5算法[未登录] 2008-12-05 09:00 Matthew Chen

char[] charArray = inputStr.toCharArray(); //将字符串转换为字符数组
不大好,考虑到string编码方式还是用inputStr.getbytes()这类的方法好,如果加上编码方式,还原的时候用上就是了。  回复  更多评论   

# re: 信息摘要算法实现之MD5算法 2008-12-05 11:06 即兴诗人

使用String的getBytes方法确比toCharArray好,感谢留言指出!@Matthew Chen
  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: