首页>代码>spring mvc+Resteasy+Mybatis+Ehcache整合开发java webservice接口示例demo>/springmvcResteasyMybatisEhcache/src/main/java/com/uniware/encry/util/PassEncryUtil.java
package com.uniware.encry.util;

import org.apache.commons.codec.binary.Base64;

public class PassEncryUtil {
	private static int saltSize = 32;
	private static int iterations = 1000;
	private static int subKeySize = 32;

	/**
	 * 获取 Salt
	 * @return
	 */
	public static String getSalt() {
		return Rfc2898DeriveBytes.generateSalt(saltSize);
	}

	/**
	 * 获取hash后的密码
	 * @param password
	 * @param salt
	 * @return
	 */
	public static String getHash(String password, String salt) {
		Rfc2898DeriveBytes keyGenerator = null;
		try {
			keyGenerator = new Rfc2898DeriveBytes(password + salt, saltSize, iterations);
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		byte[] subKey = keyGenerator.getBytes(subKeySize);
		byte[] bSalt = keyGenerator.getSalt();
		byte[] hashPassword = new byte[1 + saltSize + subKeySize];
		System.arraycopy(bSalt, 0, hashPassword, 1, saltSize);
		System.arraycopy(subKey, 0, hashPassword, saltSize + 1, subKeySize);
		return Base64.encodeBase64String(hashPassword);
	}

	/**
	 * 验证密码
	 * @param hashedPassword
	 * @param password
	 * @param salt
	 * @return
	 */
	public static boolean verify(String hashedPassword, String password, String salt) {
		byte[] hashedPasswordBytes = Base64.decodeBase64(hashedPassword);
		if (hashedPasswordBytes.length != (1 + saltSize + subKeySize) || hashedPasswordBytes[0] != 0x00) {
			return false;
		}

		byte[] bSalt = new byte[saltSize];
		System.arraycopy(hashedPasswordBytes, 1, bSalt, 0, saltSize);
		byte[] storedSubkey = new byte[subKeySize];
		System.arraycopy(hashedPasswordBytes, 1 + saltSize, storedSubkey, 0, subKeySize);
		Rfc2898DeriveBytes deriveBytes = null;
		try {
			deriveBytes = new Rfc2898DeriveBytes(password + salt, bSalt, iterations);
		} catch (Exception e) {
			e.printStackTrace();
		}
		byte[] generatedSubkey = deriveBytes.getBytes(subKeySize);
		return byteArraysEqual(storedSubkey, generatedSubkey);
	}

	private static boolean byteArraysEqual(byte[] storedSubkey, byte[] generatedSubkey) {
		int size = storedSubkey.length;
		if (size != generatedSubkey.length) {
			return false;
		}

		for (int i = 0; i < size; i++) {
			if (storedSubkey[i] != generatedSubkey[i]) {
				return false;
			}
		}
		return true;
	}

}
最近下载更多
503382513  LV10 10月29日
1358849392  LV21 2023年11月18日
xinshofh  LV9 2023年6月7日
wsupsup  LV16 2021年6月7日
hehe264  LV20 2020年5月11日
我真的是小明  LV10 2019年7月16日
kenmeon  LV1 2019年2月5日
luujaa  LV1 2019年2月3日
大鹏小镇  LV14 2018年9月7日
hopeway  LV1 2018年9月5日
最近浏览更多
ksksksks  LV11 2023年9月18日
xinshofh  LV9 2023年6月7日
503382513  LV10 2022年12月6日
tlpaladin  LV7 2022年11月29日
谢谢谢谢谢谢你  LV6 2022年7月19日
MouYa77  LV10 2022年2月18日
刘亦菲9527  LV15 2021年12月27日
ssh123  LV10 2021年11月18日
huaua7676  LV30 2021年9月25日
shiopaaa  LV13 2021年8月18日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友