MD5加密原理

来源:互联网 发布:nginx 安装后无法访问 编辑:程序博客网 时间:2024/06/07 21:12

 

              MD5加密 :

                         安全散列算法(全称:Message - Digest Algorithm 5),现在应用最广泛的哈希算法之一,主要应用于对文件以及密码等加密处理为了保证文件的正确性,防止一些人盗用程序

          

               一、思想输入两个不同的明文不会得到相同的输出值,不能得到原始的明文,即其过程是不可逆的

                      (也就是说如果数据库被盗,不会通过数据库里加密计算出的32位十六进制数反推出原密码),广泛应用于

                       互联网网站的用户文件加密,能够将用户密码加密为128位的长整数。数据库并不明文存储用户密码,而是在

                       用户登录时将输入密码字符串进行 MD5加密,与数据库中所存储的MD5值匹配,从而降低数据库被盗后用户

                       损失的风险。


                二、 MD5特点
                                            1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
                             2、容易计算:从原数据计算出MD5值很容易。
                             3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
                             4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
                             5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。


              三、工具类

                                public class MD5Util {
    
                                         //使用MD5的算法进行加密
    
                                         public static String md5(String plainText) {
        
                                                  byte[] secretBytes = null;
        
                                                  try {
            
                                                                  secretBytes = MessageDigest.getInstance("md5").digest(plainText.getBytes());
            
                                                        } catch (NoSuchAlgorithmException e) {
            
                                                                   throw new RuntimeException("没有MD5这个算法!");
            
                                                        }
        
                                                   // 16进制数字        
                                                   String md5code = new BigInteger(1, secretBytes).toString(16);
                
                                                   // 如果生成数字未满32位,需要前面补0        
                                                   while(md5code.length() < 32){
            
                                                                 md5code = "0" + md5code;
            
                                                   }    
        
                                                          return md5code;
        
                                                   }

                                      //使用MD5的算法进行加密
                                      public static boolean md5s(String plainText,String pwd) {
        
                                                    byte[] secretBytes = null;
        
                                                     try {
            
                                                                  secretBytes = MessageDigest.getInstance("md5").digest(plainText.getBytes());
            
                                                          } catch (NoSuchAlgorithmException e) {
            
                                                                       throw new RuntimeException("没有MD5这个算法!");
            
                                                          }
        
                                                       // 16进制数字        
                                                        String md5code = new BigInteger(1, secretBytes).toString(16);
                
                                                       // 如果生成数字未满32位,需要前面补0        
                                                       while(md5code.length() < 32){
            
                                                                   md5code = "0" + md5code;
            
                                                         }    
        
                                                         if(md5code.equals(pwd)){
            
                                                                    return true;
            
                                                         }else{
            
                                                                     return false;
            
                                                          }
        
                                         }
                                }

 
                 四、登录与注册的运用

                            1、导入项目所需jar包

                                         spring-security-crypto-3.1.0.RELEASE.jar


                             2、在项目中的运用

                                    @Repository
                                    public class T_userDAO {
    
                                             @Resource
                                             private T_userMapper mapper;
    
                                            //登录
                                              public String login(T_user user){
           
                                                                 T_user ow = mapper.login(user.getUsername());
        
                                                                 //md5
                                                                 boolean b = MD5Util.md5s(user.getPassword(),ow.getPassword());

                                                                  System.out.println(b);
        
                                                                return "ow";
                                               }

    
                                            //注册
                                            public void register(T_user user){
        
                                                                  //MD5            
                                                                user.setPassword(MD5Util.md5(user.getPassword()));
                
                                                                mapper.register(user);
        
                                             }


                                }



1 0
原创粉丝点击