鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 网站安全 > 加密解密 > >

MD5密码加密

来源:互联网 作者:佚名 时间:2015-09-08 11:00
方法一: public class SHAEncrypt {static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; public static String encryptPwd(String password){MessageDigest ssha = null;try {ssha = MessageD
方法一:
public class SHAEncrypt {
	
	static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',  
		    'a', 'b', 'c', 'd', 'e', 'f' };  
	
	public static String encryptPwd(String password){
		MessageDigest ssha = null;
		try {
			ssha = MessageDigest.getInstance("SHA");
			ssha.update(password.getBytes());
		} catch (NoSuchAlgorithmException e) {
			Log.error("None of the encryption algorithm(没有该加密算法)");
			e.printStackTrace();
		}
		return ssha.digest().toString();
	}
	
	
	
	public static String encryptPwd(String password, String algorithm) throws Exception{
		try {
			MessageDigest ssha = MessageDigest.getInstance(algorithm);
			ssha.update(password.getBytes());
			byte[] bytes = ssha.digest();
			int j = bytes.length ;
			char str[] = new char[j * 2];
			int k = 0 ;
			for (int i = 0; i < j; i++) {
				byte byte0 = bytes[i];
				str[k++] = hexDigits[byte0 >>> 4  &  0xf ];                  
				str[k++] = hexDigits[byte0  &  0xf ];
			}
			return new String(str);
		} catch (NoSuchAlgorithmException e) {
			Log.error("None of the encryption algorithm(没有该加密算法)");
			e.printStackTrace();
			throw new Exception("encryptPwd failed");
		}
	}
	
	/**
	 * MD5二次加密
	 * 
	 * @date 2013-1-4 下午03:32:54
	 * @param password
	 * @return
	 * @throws Exception 	
	 * @return String
	 */
	public static String MD5SecondaryEncrypt(String password) throws Exception{
		return  encryptPwd(encryptPwd(password, "MD5"),"MD5");
	}
	
	/**
	 * 根据密码明文和密码类型获取密码
	 * 
	 * @date 2013-1-4 下午03:12:10
	 * @param passType  0=明文, 1=MD5, 2=crypt, 3=ssha ,4=MD5*3,5=LDAP, 6=external WEB
	 * @return 	
	 * @return String
	 */
	public static String getPwdByPassType( String password, int passType){
		String encryptPwd = null;
		try {
			switch (passType) {
			case 0:
				encryptPwd = password;
				break;
			case 1:
				encryptPwd = encryptPwd(password, "MD5");
				break;
			case 2:
				encryptPwd = password;
				break;
			case 3:
				encryptPwd = encryptPwd(password, "MD5");
				break;
			case 4:
				encryptPwd = MD5SecondaryEncrypt(password);
				break;
			case 5:
				encryptPwd = password;
				break;
			default:
				break;
			}
		} catch (Exception e) {
			Log.error("getPwdByPassType failed:"+e);
			e.printStackTrace();
		}
		
		return encryptPwd;
	}
	
	
	public static void main(String[] args) {
		try {
			System.out.println(SHAEncrypt.encryptPwd("123", "MD5"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}




方法一:原理一样
import java.security.MessageDigest; 

/**
 * 对密码进行加密和验证的类
 */
public class CipherUtil {
	
	//十六进制下数字到字符的映射数组  
    private final static String[] hexDigits = {"0", "1", "2", "3", "4",  
        "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};  
      
    /** * 把inputString加密     */  
    public static String generatePassword(String inputString){  
        return encodeByMD5(inputString);  
    }  
      
    /** 
     * 验证输入的密码是否正确 
     * @param password    加密后的密码 
     * @param inputString    输入的字符串 
     * @return    验证结果,TRUE:正确 FALSE:错误 
     */  
    public static boolean validatePassword(String password, String inputString){  
        if(password.equals(encodeByMD5(inputString))){  
            return true;  
        } else{  
            return false;  
        }  
    }  
    
    /**  对字符串进行MD5加密     */  
    private static String encodeByMD5(String originString){  
        if (originString != null){  
            try{  
                //创建具有指定算法名称的信息摘要  
                MessageDigest md = MessageDigest.getInstance("MD5");  
                //使用指定的字节数组对摘要进行最后更新,然后完成摘要计算  
                byte[] results = md.digest(originString.getBytes());  
                //将得到的字节数组变成字符串返回  
                String resultString = byteArrayToHexString(results);  
                return resultString.toUpperCase();  
            } catch(Exception ex){  
                ex.printStackTrace();  
            }  
        }  
        return null;  
    }  
      
    /**  
     * 转换字节数组为十六进制字符串 
     * @param     字节数组 
     * @return    十六进制字符串 
     */  
    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 pwd1="123";  
        String pwd2="";  
        System.out.println("未加密密码:"+pwd1);  
        //将123加密  
        pwd2 = CipherUtil.generatePassword(pwd1);  
        System.out.println("加密后的密码:"+pwd2);  
          
        System.out.print("验证密码是否下确:");  
        if(CipherUtil.validatePassword(pwd2, pwd1)) {  
            System.out.println("正确");  
        }  
        else {  
            System.out.println("错误");  
        }  
    }
}

网友评论
<