一:特点
加密密钥和解密密钥是一样的,安全性没有那么高
二:对称加密算法
-DES --3DES
-AES
-PBE
-IDEA
三:DES算法(Data Encryption Standard):数据加密标准
public static void jdkDes(){
try {
//生成KEY
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
//指定KeySize
keyGenerator.init(56);
SecretKey secretKey=keyGenerator.generateKey();
byte[] keyBytes=secretKey.getEncoded();
//KEY转换
DESKeySpec desKeySpec=new DESKeySpec(keyBytes);
SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("DES");
Key key=secretKeyFactory.generateSecret(desKeySpec);
//加密
Cipher cipher=Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE,key);
byte[] Encoderesults=cipher.doFinal(src.getBytes());
System.out.println("加密后的密文为:"+ org.apache.commons.codec.binary.Hex.encodeHexString(Encoderesults));
//解密
Cipher cipher1=Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher1.init(Cipher.DECRYPT_MODE,key);
byte[] decodResult=cipher1.doFinal(Encoderesults);
System.out.println("解密后的密文为:"+ new String(decodResult));
}catch (Exception e){
e.printStackTrace();
}
}
2):3DES算法
private static String src="使用3des实现对称加密";
//使用jdk
public static void jdk3Des(){
try{
//生成key
KeyGenerator keyGenerator= KeyGenerator.getInstance("DESede");
//keyGenerator.init(168);
keyGenerator.init(new SecureRandom());
SecretKey secretKey=keyGenerator.generateKey();
byte[] byteKey=secretKey.getEncoded();
//key的转换
DESedeKeySpec desKeySpec=new DESedeKeySpec(byteKey);
SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("DESede");
Key key=secretKeyFactory.generateSecret(desKeySpec);
//加密
Cipher ciper=Cipher.getInstance("DESede/ECB/PKCS5Padding");
ciper.init(Cipher.ENCRYPT_MODE,key);
byte[] encodeResult=ciper.doFinal(src.getBytes());
System.out.println("加密后的密文为:"+ Hex.encodeHexString(encodeResult));
//解密
ciper.init(Cipher.DECRYPT_MODE,key);
byte[] decodeResult=ciper.doFinal(encodeResult);
System.out.println("解密后的密文为:"+new String(decodeResult));
}catch (Exception e){
e.printStackTrace();
}
}
3):AES加密算法(通常用于移动通信系统加密以及基于ssh协议的软件)
/**
* 使用AES加密算法
*/
public class AESUtil {
private static String src="使用AES来进行加密";
//jdk
public static void jdkAes(){
try {
//生成key
KeyGenerator keyGenerator=KeyGenerator.getInstance("AES");
keyGenerator.init(new SecureRandom());
SecretKey secretKey=keyGenerator.generateKey();
byte[] keyBytes=secretKey.getEncoded();
//转换key
Key key=new SecretKeySpec(keyBytes,"AES");
//加密
Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE,key);
byte[] encodeResult=cipher.doFinal(src.getBytes());
System.out.println("加密后的密文为:"+ Base64.encodeBase64String(encodeResult));
//解密
cipher.init(Cipher.DECRYPT_MODE,key);
byte[] decodeResult=cipher.doFinal(encodeResult);
System.out.println("解密后的密文为:"+new String(decodeResult));
}catch (Exception e){
e.printStackTrace();
}
}
//AES的BC实现
public static void BcAES(){
Security.addProvider(new BouncyCastleProvider());
try {
//生成key
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.getProvider();
keyGenerator.init(new SecureRandom());
SecretKey secretKey=keyGenerator.generateKey();
byte[] keyByte=secretKey.getEncoded();
//转换key
Key key=new SecretKeySpec(keyByte,"AES");
//加密
Cipher cipher=Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE,key);
byte[] encodeResult=cipher.doFinal(src.getBytes());
System.out.println("加密后的密文为:"+ Base64.encodeBase64String(encodeResult));
//解密
cipher.init(Cipher.DECRYPT_MODE,key);
byte[] decodeResult=cipher.doFinal(encodeResult);
System.out.println("解密后的密文为:"+new String(decodeResult));
}catch (Exception e){
e.printStackTrace();
}
}
4):PBE加密算法(Password Based Encryption)基于口令加密
public class PBEUtil {
private static String src="使用PBE进行加密";
//使用jdk
public static void jdkPBE(){
try {
//初始化盐
SecureRandom random = new SecureRandom();
byte[] salt = random.generateSeed(8);
//口令与密钥
String password = "password";
PBEKeySpec pbeKeySpec = new PBEKeySpec(password.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[] encodeResult= cipher.doFinal(src.getBytes());
System.out.println("加密后的密文为:"+ Base64.encodeBase64String(encodeResult));
//解密
cipher.init(Cipher.DECRYPT_MODE,key,pbeParameterSpec);
byte[] decodeREsult=cipher.doFinal(encodeResult);
System.out.println("解密后的密文为:"+new String(decodeREsult));
}catch (Exception e){
e.printStackTrace();
}
}