Java中加密算法介绍及其实现( 五 )


AES加密
AES加密及其解密需要的参数

Java中加密算法介绍及其实现

文章插图
AES加密流程
Java中加密算法介绍及其实现

文章插图
public static void jdkAES(String str) throws Exception {//系统自动生成keyKeyGenerator keyGenerator = KeyGenerator.getInstance("AES");keyGenerator.init(128);byte[] key = keyGenerator.generateKey().getEncoded();//转换秘钥Key convertSecretKey = new SecretKeySpec(key, "AES");//加密//加密模式 DESCipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//初始化加密工具cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);byte[] enBytes = cipher.doFinal(str.getBytes());//展示System.out.println("Jdk DES Encrypt:" + Hex.toHexString(enBytes));//解密cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);byte[] deBytes = cipher.doFinal(enBytes);System.out.println("Jdk DES Decrypt:" + new String(deBytes));}
BC+JDK实现类似于DES的方式
PBE( Based )加密
Java中加密算法介绍及其实现

文章插图
PBE( Based  , 基于口令加密)是一种基于口令的加密算法 , 其特点是使用口令代替了密钥 , 而口令由用户自己掌管 , 采用随机数杂凑多重加密等方法保证数据的安全性 。PBE算法在加密过程中并不是直接使用口令来加密 , 而是加密的密钥由口令生成 , 这个功能由PBE算法中的KDF函数完成 。KDF函数的实现过程为:将用户输入的口令首先通过“盐”(salt)的扰乱产生准密钥 , 再将准密钥经过散列函数多次迭代后生成最终加密密钥 , 密钥生成后 , PBE算法再选用对称加密算法对数据进行加密 , 可以选择DES、3DES、RC5等对称加密算法 。
常用加密方式
Java中加密算法介绍及其实现

文章插图
加密流程
Java中加密算法介绍及其实现

文章插图
JDK实现
/*** 基于口令的对称加密算法PBE*/public class PBE {private static final String BASE_STRING ="security PBETest";private static final String BASE_PWD="security Pwd";public static void main(String[] args) throws Exception {jdkPBE(BASE_STRING);}public static void jdkPBE(String str) throws Exception {//初始化盐SecureRandom random = new SecureRandom();byte[] salt = random.generateSeed(8);//口令于秘钥PBEKeySpec pbeKeySpec = new PBEKeySpec(BASE_PWD.toCharArray());SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHMD5andDES");Key key = factory.generateSecret(pbeKeySpec);//加密PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt,100);Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");cipher.init(Cipher.ENCRYPT_MODE,key,pbeParameterSpec);byte[] enBytes = cipher.doFinal(str.getBytes());System.out.println("JDK PBE 加密:"+ Base64.encodeBase64String(enBytes));cipher.init(Cipher.DECRYPT_MODE,key,pbeParameterSpec);byte[] deBytes = cipher.doFinal(enBytes);System.out.println("JDK PBE 解密:"+new String(deBytes));}}
其他实现方式只需修改加密方式
4.非对称加密算法 非对称加密算法简介
非对称加密算法需要两个密钥:公开密钥()和私有密钥() 。公开密钥与私有密钥是一对 , 如果用公开密钥对数据进行加密 , 只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密 , 那么只有用对应的公开密钥才能解密 。因为加密和解密使用的是两个不同的密钥 , 所以这种算法叫作非对称加密算法 。非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密 。