对称加密算法(4):PEB

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31301681/article/details/77801384

一.PBE(Password Based Encryption,基于口令加密)是一种基于口令的加密算法,其特点是使用口令代替了密钥,而口令由用户自己掌管,采用随机数(这里称之为 盐 或者 扰码)杂凑多重加密等方法保证数据的安全性。PBE 算法并没有 真正构建新的加密/解密算法,而是对已知的对称加密算法(eg:DES算法)做了包装;使用PBE算法对数据做加密/解密操作时,其实是使用了 DES 或者 AES 等其他对称加密算法做了相应的操作。

二.PEB 的算法还是比较多的(或者说是包装算法),如图:

三.实现的方式有 jdk , 跟 bc 的两种 方式,下面给出 jdk 的具体实现(java):

	/**
	 * 获取 盐(扰码)
	 * @return
	 */
	public static byte [] PEB_GetSalt(){
		SecureRandom random = new SecureRandom();
		byte [] salt = random.getSeed(8);
		return salt;
	}
	
	/**
	 * 将口令转为秘钥 
	 * @param password
	 * @return
	 * @throws Exception
	 */
	public static Key PEB_PassWordToKey (String password)throws Exception{
		PBEKeySpec pebkeyspec = new PBEKeySpec(password.toCharArray());
		SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHMD5andDES");// 指定算法
		return factory.generateSecret(pebkeyspec);
	}
	
	/**
	 * JDK  使用 peb 进行数据的加密 
	 * @param src
	 * @param encryptKey
	 * @return
	 * @throws Exception
	 */
	public static byte [] JDK_PEB_Decrypt(String src,byte [] salt,String password) throws Exception{
		PBEParameterSpec paraSpec = new PBEParameterSpec(salt,10);  
		//加密
		Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");
		cipher.init(Cipher.ENCRYPT_MODE, PEB_PassWordToKey(password),paraSpec);
		byte [] result = cipher.doFinal(src.getBytes());
		return result;
	}
	
	/**
	 * jdk   peb   对数据进行解密 
	 * @param encryptBytes
	 * @param salt
	 * @param password
	 * @return
	 * @throws Exception
	 */
	public static String JDK_PEB_Encrypt(byte [] encryptBytes,byte [] salt,String password) throws Exception{
		PBEParameterSpec paraSpec = new PBEParameterSpec(salt,10);  
		//解密
		Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");
		cipher.init(Cipher.DECRYPT_MODE, PEB_PassWordToKey(password),paraSpec);
		String result = new String(cipher.doFinal(encryptBytes));
		return result;
	}





猜你喜欢

转载自blog.csdn.net/qq_31301681/article/details/77801384
今日推荐