zoukankan      html  css  js  c++  java
  • PasswordEncoder

    package com.broadengate.common;
    
    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 = "username";
    		PasswordEncoder encoderMd5 = new PasswordEncoder(salt, "MD5");
    		String encode = encoderMd5.encode("password");
    		System.out.println(encode);
    		
    		boolean passwordValid = encoderMd5.isPasswordValid("1bd98ed329aebc7b2f89424b5a38926e", "test");
    		System.out.println(passwordValid);
    
    		PasswordEncoder encoderSha = new PasswordEncoder(salt, "SHA");
    		String pass2 = encoderSha.encode("password");
    		System.out.println(pass2);
    		
    		boolean passwordValid2 = encoderSha.isPasswordValid("1d26806da123dd76cdc52fc3daa9ad6777522935", "password");
    		System.out.println(passwordValid2);
    	}
    
    }
    
  • 相关阅读:
    其它 Surface 重装系统 win10
    电商 商品数据分析 市场洞察 导出数据后 横线对比 python实现2
    电商 商品数据分析 市场洞察 导出数据后 横线对比 python实现
    电商 商品数据分析 市场洞察 导出数据后 横线对比
    Python excel转换为json
    关于四舍五入
    MBProgressHUD 显示后,为何不能点击屏幕其他地方
    使用容器挂载NFS
    luogu P1128 [HNOI2001]求正整数 dp 高精度
    EC R 86 D Multiple Testcases 构造 贪心 二分
  • 原文地址:https://www.cnblogs.com/yangy608/p/1918345.html
Copyright © 2011-2022 走看看