zoukankan      html  css  js  c++  java
  • MD5加盐 Java加密算法

    MD5带盐值的java加密算法

     
    import java.security.MessageDigest;
    
    public class PasswordEncoder {
     
     private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
       "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
     
     private Object salt;
     private String algorithm;
     
     public PasswordEncoder(Object salt, String algorithm) {
      this.salt = salt;
      this.algorithm = algorithm;
     }
    
     public String encode(String rawPass) {
      String result = null;
      try {
       MessageDigest md = MessageDigest.getInstance(algorithm);
       //加密后的字符串  
       result = byteArrayToHexString(md.digest(mergePasswordAndSalt(rawPass).getBytes("utf-8")));
      } catch (Exception ex) {
      }
      return result;
     }
     
        public boolean isPasswordValid(String encPass, String rawPass) {
            String pass1 = "" + encPass;
            String pass2 = encode(rawPass);
    
            return pass1.equals(pass2);
        }
        
        private String mergePasswordAndSalt(String password) {
            if (password == null) {
                password = "";
            }
    
            if ((salt == null) || "".equals(salt)) {
                return password;
            } else {
                return password + "{" + salt.toString() + "}";
            }
        }
    
     /**
      * 转换字节数组为16进制字串
      * @param b 字节数组
      * @return 16进制字串
      */
     private static String byteArrayToHexString(byte[] b) {
      StringBuffer resultSb = new StringBuffer();
      for (int i = 0; i < b.length; i++) {
       resultSb.append(byteToHexString(b[i]));
      }
      return resultSb.toString();
     }
    
     private static String byteToHexString(byte b) {
      int n = b;
      if (n < 0)
       n = 256 + n;
      int d1 = n / 16;
      int d2 = n % 16;
      return hexDigits[d1] + hexDigits[d2];
     }
        
        public static void main(String[] args) {
         String salt = "helloworld";
      PasswordEncoder encoderMd5 = new PasswordEncoder(salt, "MD5");
         String encode = encoderMd5.encode("test");
         System.out.println(encode);
         boolean passwordValid = encoderMd5.isPasswordValid("1bd98ed329aebc7b2f89424b5a38926e", "test");
         System.out.println(passwordValid);
    
         PasswordEncoder encoderSha = new PasswordEncoder(salt, "SHA");
         String pass2 = encoderSha.encode("test");
         System.out.println(pass2);
         boolean passwordValid2 = encoderSha.isPasswordValid("1bd98ed329aebc7b2f89424b5a38926e", "test");
         System.out.println(passwordValid2);
     }
    
    }
    

    转自:http://www.cnblogs.com/yinww/archive/2009/12/02/1615542.html

  • 相关阅读:
    抓包的原理
    在ASP.NET MVC中使用JQ插件datatable
    如何禁用Visual Studio 2013的Browser Link功能
    SVN中tag branch trunk用法详解
    ASP.NET MVC和jQuery DataTable整合
    随便看的
    SQL查询今天、昨天、7天内、30天
    在DataTable数据类型最后增加一列,列名为“Column”,内容都为“AAA”
    validform表单验证插件最终版
    context.Session[“xxx”]详解
  • 原文地址:https://www.cnblogs.com/yangyi9343/p/5775743.html
Copyright © 2011-2022 走看看