特点在于口令由用户自己掌管;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。
盐加密法
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(); } }