在Java中的加密算法(一)中主要讲解了密码中常用的术语,Java安全组成,Base64加密算法以及消息摘要算法。上文中主要讲解的是一些常用的算法,其实还有很多算法,可以自行了解。本文主要讲解的是对称加密算法和非对称的加密算法。对称和非对称指的是加密密钥和解密密钥。如果加密密钥和解密密钥相同,则称为对称,反之为非对称。
1.对称加密算法
发送方便使用密钥对明文加密,然后接收方便使用相同的密钥对密文解密。发送方和接收方使用的密钥为同一个。是一种初等的加密算法,安全性不是特别的高。
- 常用的加密算法
- <b>DES(数据加密标准)</b>:DES为最早期的加密算法,由美国国家标准局制定,由于密钥的长度不够,后被3DES替代
- <b>3DES</b>:3DES为升级版,改进了算法和安全性
- <b>AES</b>:AES由两位比利时密码学家设计,后来被美国联邦政府采用的一种加密算法。
1.1 对称加密算法-DES
DES对称加密算法.png/**
* 使用JDK实现DES(对称加密算法)加密
* @param src
*/
public static void jdkDES(String src) {
try {
//生成Key
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);//设置长度
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
//key转换
DESKeySpec desKeySpec = new DESKeySpec(keyBytes);
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
SecretKey generateSecret = secretKeyFactory.generateSecret(desKeySpec);
//加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, generateSecret);
byte[] result = cipher.doFinal(src.getBytes());
System.out.println(Hex.encodeHexString(result));
//解密
cipher.init(Cipher.DECRYPT_MODE,generateSecret);//使用同一个key
result = cipher.doFinal(result);
System.out.println(new String(result));
} catch (Exception e) {
e.printStackTrace();
}
}
三方-Bouncy Castle实现
/**
* 使用Bouncy Castle实现DES(对称加密算法)加密
* @param src
*/
public static void jdkDES(String src) {
try {
Security.addProvider(new BouncyCastleProvider());//引入Bouncy Castle
//生成Key
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.getProvider();
keyGenerator.init(56);//设置长度
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
//key转换
DESKeySpec desKeySpec = new DESKeySpec(keyBytes);
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
SecretKey generateSecret = secretKeyFactory.generateSecret(desKeySpec);
//加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, generateSecret);
byte[] result = cipher.doFinal(src.getBytes());
System.out.println(Hex.encodeHexString(result));
//解密
cipher.init(Cipher.DECRYPT_MODE,generateSecret);//使用同一个key
result = cipher.doFinal(result);
System.out.println(new String(result));
} catch (Exception e) {
e.printStackTrace();
}
}
网友评论