我是靠谱客的博主 舒服机器猫,最近开发中收集的这篇文章主要介绍PBKDF2加密算法话不多说,上代码!!!,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

做过网站的人都知道用户密码必须经过加密的,其中用的最普遍的就是MD5加密了.但是随着彩虹桥技术的兴起,MD5加密已经不再安全.今天小编就要介绍一种全新的,安全的加密算法:PBKDF2
PBKDF2算法通过多次hash来对密码进行加密。原理是通过password和salt进行hash,然后将结果作为salt在与password进行hash,多次重复此过程,生成最终的密文。此过程可能达到上千次,逆向破解的难度太大,破解一个密码的时间可能需要几百年,所以PBKDF2算法是安全的.

话不多说,上代码!!!

encode()


	/**
	 * PBKDF2加密
	 * @author knight
	 * @param plain 明文
	 * @return String 密文
	 */
	public static String encode(String plain) {
		//1.生成随机盐salt
		byte[] salt = EncryptUtil.generateSalt(32);
		//2.随机盐HEX加密
		String encodeHex = EncryptUtil.encodeHex(salt);
		//3.明文和随机盐一起SHA1运算1024次
		byte[] sha1 = EncryptUtil.sha1(plain.getBytes(), salt, 1024);
		//4.对运算结果进行HEX加密
		String ciperText = EncryptUtil.encodeHex(sha1);
		//4.加密后的随机盐和加密后的明文生成密文
		String finalText=encodeHex+ciperText;
		return finalText;
	}

generateSalt()

/**
* 生成随机的Byte[]作为salt.
*
* @param numBytes byte数组的大小
*/
public static byte[] generateSalt(int numBytes) {
Validate.isTrue(numBytes > 0, “numBytes argument must be a positive integer (1 or larger)”, numBytes);
byte[] bytes = new byte[numBytes];
random.nextBytes(bytes);
return bytes;
}

encodeHex()

/**
* Hex编码.
*/
public static String encodeHex(byte[] input) {
return new String(Hex.encodeHex(input));
}

sha1()

/**
* 对输入字符串进行sha1散列.
*/
public static byte[] sha1(byte[] input) {
return digest(input, SHA1, null, 1);
}

decode()

/**
	 * PBKDF2解密
	 * @param plain 明文
	 * @param ciper 密文
	 * @return flag 对比结果
	 */
	public static boolean decode(String plain,String ciper) {
		boolean flag=false;
		//1.截取随机盐
		String saltHex = ciper.substring(0, 32*2);
		//2.随机盐解密
		byte[] salt = EncryptUtil.decodeHex(saltHex);
		//3.明文和随机盐一起SHA1运算1024次
		byte[] sha1 = EncryptUtil.sha1(plain.getBytes(), salt, 1024);
		//4.对运算结果进行HEX加密
		String ciperText = EncryptUtil.encodeHex(sha1);
		//5.生成密文
		String finalCiper=saltHex+ciperText;
		if(finalCiper.equals(ciper)) {
			flag=true;
		}
		return flag;
	}
	

main方法


	public static void main(String[] args) {
		String plain="admin";
		String ciper=encode(plain);
		System.out.println(ciper);
		System.out.println(decode(plain, ciper));
		
	}

运行结果:

65ab8cc6b61f03a5953c6d020b6fc95c8719717147a941b66fc7c809d8d7fc260ba61cb04510346a574b2781c59756e232b44046
true

56cf2d157f427b67a693c1a04a6b1ce0237e57854735516b338f3945b8f807a73a1c9222569dbb82d46ece311f6b3123394e6355
true

38165c3905cc6377d8bfbe50d07586964fb03b497962f5e5dcb10e92d20c28254364bb5fbf7d2b2eb1a15f33620a47cd9217b825
true

项目源码 :https://download.csdn.net/download/knight201603

有关加密算法的介绍请看这篇博客:
https://blog.csdn.net/wowotuo/article/details/77150796

最后

以上就是舒服机器猫为你收集整理的PBKDF2加密算法话不多说,上代码!!!的全部内容,希望文章能够帮你解决PBKDF2加密算法话不多说,上代码!!!所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部