对称加密算法:加密密钥=解密密钥
DES
一般不会出现
public static void main(String[] args){
//jdkDES();
byte[] secretKeyEncode = createSecretKeyEncode();
System.out.println(decrypt(secretKeyEncode,encryption(secretKeyEncode,"hello world")));
}
/**
* 创建密钥
* @return
*/
public static byte[] createSecretKeyEncode(){
//生成key
KeyGenerator keyGenerator= null;
try {
keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey secretKey=keyGenerator.generateKey();
return secretKey.getEncoded();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
/**
* 加密
* @param secretKeyEncode
* @param msg
* @return
*/
public static byte[] encryption(byte[] secretKeyEncode,String msg){
//KEY转化
DESKeySpec desKeySpec= null;
try {
desKeySpec = new DESKeySpec(secretKeyEncode);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
SecretKey convertSecretKey = factory.generateSecret(desKeySpec);
//加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE,convertSecretKey);
byte[] result = cipher.doFinal(msg.getBytes());
return result;
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
return null;
}
/**
* 解密
* @param secretKeyEncode
* @param msg
* @return
*/
public static String decrypt(byte[] secretKeyEncode,byte[] msg){
try {
//KEY转化
DESKeySpec desKeySpec=new DESKeySpec(secretKeyEncode);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
SecretKey convertSecretKey = factory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE,convertSecretKey);
return new String(cipher.doFinal(msg));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
}
return null;
}
AES,安全性教高
private static String SRC="hello world";
public static void main(String[] args){
jdkAES();
}
public static void jdkAES(){
try {
KeyGenerator keyGenerator=KeyGenerator.getInstance("AES");
keyGenerator.init(128);
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[] bytes = cipher.doFinal(SRC.getBytes());
System.out.println("jdk aes encrypt:"+ Base64.encodeBase64String(bytes));
//解密
cipher.init(Cipher.DECRYPT_MODE,key);
byte[] result=cipher.doFinal(bytes);
System.out.println("jdk aes desrypt:"+new String(result));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
}
PBE
结合了消息摘要算法和对称加密算法的优点。
使用场景:
private static String src="hello world";
public static void main(String[] args){
jdkPBE();
}
public static void jdkPBE(){
try {
//初始化盐
SecureRandom random=new SecureRandom();
byte[] salt = random.generateSeed(8);
//口令与密钥
String password="shipp";
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[] result = cipher.doFinal(src.getBytes());
System.out.println("jdk pbe encrypt:"+ Base64.encodeBase64String(result));
//解密
cipher.init(Cipher.DECRYPT_MODE,key,pbeParameterSpec);
byte[] bytes = cipher.doFinal(result);
System.out.println("jdk pbe decrypt:"+new String(bytes));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
}