加密技术——PBE

PBE加密——对称加密,
特点在于口令由用户自己掌管;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。

盐加密法


eg:
/**
	 * 获取密码为password的pbe密钥
	 * @param password
	 * @return
	 * @throws Exception
	 */
	private static SecretKey getPBESecretKey(String password) throws Exception{
		//制作secretKey
		PBEKeySpec pbeSpec = new PBEKeySpec(password.toCharArray());
		SecretKeyFactory seckeyFactory  = SecretKeyFactory.getInstance("PBEWITHMD5andDES");
		SecretKey secretkey = seckeyFactory.generateSecret(pbeSpec);
		return secretkey;
	}
	/**
	 * 制作8位盐
	 * @return
	 */
	private static byte [] makeSaltAry(){
		byte [] saltbyte = new byte[8];
		Random random = new Random();
		random.nextBytes(saltbyte);
		return saltbyte;
	}
	/**
	 * @param mingwen 明文
	 * @param password 密码
	 * @param saltary 随机算法盐
	 * @return
	 * @throws Exception 
	 */
	public static byte [] pbeEncryption(byte [] mingwen,String password,byte [] saltary,int cipherMode) throws Exception{
		//1.根据盐制作pbe计算规则 : 盐+int数字 ---此加密算法硬性规定
		PBEParameterSpec pbeprar = new PBEParameterSpec(saltary,100);
		//2.制作密钥
		SecretKey secretkey = getPBESecretKey("woshipassword");
		//3.制作加密解密器
		Cipher cipher  = Cipher.getInstance("PBEWITHMD5andDES");
		//4.告知加密解密器的操作 -- 加密,密钥,算法
		cipher.init(cipherMode, secretkey, pbeprar);
		
		//5.加密器开始工作——加密/解密
		return cipher.doFinal(mingwen);
	}
	
	public static void main(String args []){
		 String yuanwen = "i am yuanwen";
		 System.out.println("原文 :"+yuanwen);
		 String password = "pwp2waa";
		 System.out.println("密码 :"+password);
		 byte salt[] = makeSaltAry();
//		 byte salt[] = "12345678".getBytes();
		 try {
			byte [] change1 = pbeEncryption(yuanwen.getBytes(), password, salt,Cipher.ENCRYPT_MODE);
			System.out.println("加密后密文 :"+new String(change1));
			byte [] change2 = pbeEncryption(change1, password, salt, Cipher.DECRYPT_MODE);
			System.out.println("解密后 :"+new String(change2));
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}

猜你喜欢

转载自gamewong.iteye.com/blog/1608628