LIULIANG

java中字符串 MD5密码的加密与验证

  MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。

   将数据(如汉字)运算为另一固定长度值是杂凑算法的基础原理,MD5的前身有MD2、MD3MD4

        本实例介绍用MD5进行加密和验证,将输入字符串通过MD5加密成另一个字符串,而且根据新的字符串无法获得原字符串,但可以在不知道原始密码的情况下进行密码验证。

 

关键技术:

*通过java.security.MessageDigest的静态方法getInstance创建具有指定算法名称的信息摘要,参数为算法名,传入“MD5”则表示将使用MD5算法。

*MessageDigest的digest实例方法使用指定的字节数组对摘要进行最后更新,然后完成摘要计算,返回存放哈希值结果的季节数组,这个数组就是MD5加密产品。

*将加密后的字节数组转换成十六进制的字符窜,形成最终的密码。

*当输入字符串经过MD5加密后,得到的字符串与密码一样,则认为密码验证通过。

 

实例演示:

 1import java.security.MessageDigest;  
 2
 3  
 4public class Password {  
 5    //16进制下数字到字符的映射数组   
 6    private static String[] hexDigits = new String[]{"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};  
 7  
 8    //将inputstr加密   
 9    public static String createPassword(String inputstr)  
10    {  
11        return encodeByMD5(inputstr);  
12    }
  
13  
14    //验证密码是否正确   
15    public static boolean authenticatePassword(String pass , String inputstr)  
16    {  
17        if(pass.equals((encodeByMD5(inputstr))))  
18        {  
19            return true;  
20        }
  
21         else  
22         {  
23             return false;  
24         }
  
25     }
  
26     //对字符串进行MD5编码   
27     private static String encodeByMD5(String originstr)  
28     {  
29         if(originstr !=null)  
30         {  
31             try{  
32                 //创建具有指定算法名称的信息摘要   
33                 MessageDigest md = MessageDigest.getInstance("MD5");  
34                 //使用指定的字节数组对摘要进行最后的更新,然后完成摘要计算   
35                 byte[] results = md.digest(originstr.getBytes());  
36                  //将得到的字节数组编程字符窜返回   
37                 String resultString = byteArrayToHexString(results);  
38                 return resultString.toUpperCase();  
39             }
catch(Exception ex){  
40                 ex.printStackTrace();  
41             }
  
42         }
  
43        return null;  
44     }
  
45     //转换字节数组为十六进制字符串   
46     private static String byteArrayToHexString(byte[] b)  
47    {  
48        StringBuffer resultsb = new StringBuffer();  
49        int i=0;  
50        for(i=0;i<b.length;i++)  
51        {  
52            resultsb.append(byteToHexString(b[i]));  
53        }
  
54        return resultsb.toString();  
55    }
  
56    //将字节转化成十六进制的字符串   
57    private static String byteToHexString(byte b)  
58    {  
59        
60       int n=b;  
61       if(n<0)  
62        {  
63            n = 256 + n;  
64        }
  
65        int d1 = n / 16;  
66        int d2 = n /16;  
67        return hexDigits[d1]+hexDigits[d2];  
68    }
  
69  
70    public static void main(String[] args)  
71    {  
72        String password = Password.createPassword("123456");  
73        System.out.println("对123456用MD5加密后:"+password);  
74        String inputstr = "1234";  
75        System.out.println("1234与密码相同?"+Password.authenticatePassword(password, inputstr));  
76        inputstr = "123456";  
77        System.out.println("123456与密码相同?"+Password.authenticatePassword(password, inputstr));  
78    }
  
79}
  


转自:http://blog.csdn.net/jay314159/article/details/4918358

posted on 2012-04-08 11:00 BIG森林 阅读(3638) 评论(0)  编辑 收藏 引用 所属分类: java


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

常用链接

留言簿(2)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜