PBKDF2

PBKDF2

/***
	 * PBKDF2 加密
	 * 
	 * @param password
	 * @return
	 * @throws NoSuchAlgorithmException
	 * @throws InvalidKeySpecException
	 */
	public static String encryptPBKDF2(String password) {
		try {
			int iterations = 1000;
			char[] chars = password.toCharArray();
			byte[] salt = getSalt().getBytes();


			PBEKeySpec spec = new PBEKeySpec(chars, salt, iterations, 64 * 8);
			SecretKeyFactory skf = SecretKeyFactory
					.getInstance("PBKDF2WithHmacSHA1");
			byte[] hash = skf.generateSecret(spec).getEncoded();
			password = toHex(hash);// iterations + ":" + toHex(salt) + ":" +
									// toHex(hash);
		} catch (NoSuchAlgorithmException e) {
			// e.printStackTrace();
			log.error(e);
			password = "";
		} catch (InvalidKeySpecException e) {
			// e.printStackTrace();
			log.error(e);
			password = "";
		}
		return password;
	}


	private static SecureRandom sr = null;
	private static byte[] salt = new byte[1];


	/**
	 * 获取盐值
	 * 
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	private static String getSalt() throws NoSuchAlgorithmException {
		if (sr == null) {
			synchronized (KEY) {
				if (sr == null)
					sr = SecureRandom.getInstance("SHA1PRNG");
			}
		}
		sr.nextBytes(salt);
		return salt.toString();
	}


	/**
	 * 
	 * @param array
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	private static String toHex(byte[] array) throws NoSuchAlgorithmException {
		BigInteger bi = new BigInteger(1, array);
		String hex = bi.toString(16);
		int paddingLength = (array.length * 2) - hex.length();
		if (paddingLength > 0) {
			return String.format("%0" + paddingLength + "d", 0) + hex;
		} else {
			return hex;
		}
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值