DES(Data Encryption Standard)数据加密标准;;旧项目用得多
public static void desJDK(){
try {
String tempStr="DES";
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey generateKey = keyGenerator.generateKey();
byte[] encoded = generateKey.getEncoded();
//key转换
DESKeySpec desKeySpec = new DESKeySpec(encoded);
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = secretKeyFactory.generateSecret(desKeySpec);
//加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] doFinal = cipher.doFinal(tempStr.getBytes());
System.out.println("jdk enc:"+Hex.encodeHexString(doFinal));
//解密
cipher.init(Cipher.DECRYPT_MODE, key);
doFinal=cipher.doFinal(doFinal);
System.out.println("jdk dec:"+new String(doFinal));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3DES:
public static void JDK3des(){
try {
String tempStr="DES";
KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
///keyGenerator.init(168);
keyGenerator.init(new SecureRandom());
SecretKey generateKey = keyGenerator.generateKey();
byte[] encoded = generateKey.getEncoded();
//key转换
DESedeKeySpec desKeySpec = new DESedeKeySpec(encoded);
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey key = secretKeyFactory.generateSecret(desKeySpec);
//加密
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] doFinal = cipher.doFinal(tempStr.getBytes());
System.out.println("jdk enc:"+Hex.encodeHexString(doFinal));
//解密
cipher.init(Cipher.DECRYPT_MODE, key);
doFinal=cipher.doFinal(doFinal);
System.out.println("jdk dsc:"+new String(doFinal));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
AEC
目前使用最多的加密方式
还没有被破解
通常用于移动通信
DES替代者
public static void JDKAES(){
try {
String tempStr="AES";
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
///keyGenerator.init(168);
keyGenerator.init(new SecureRandom());
SecretKey generateKey = keyGenerator.generateKey();
byte[] keyBytes = generateKey.getEncoded();
//key转换
Key key = new SecretKeySpec(keyBytes, "AES");
//加密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] doFinal = cipher.doFinal(tempStr.getBytes());
System.out.println("jdk enc:"+Hex.encodeHexString(doFinal));
//解密
cipher.init(Cipher.DECRYPT_MODE, key);
doFinal=cipher.doFinal(doFinal);
System.out.println("jdk dsc:"+new String(doFinal));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void JDKPBE(){
try {
String tempStr="AES";
//初始化盐
byte[] salt = SecureRandom.getSeed(8);
//口令与密钥
String password="pwd";
PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHMD5andDES");
Key key=factory.generateSecret(pbeKeySpec);
//加密
PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt,100);//100 需要迭代的次数
Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");
cipher.init(Cipher.ENCRYPT_MODE, key,pbeParameterSpec);
byte[] doFinal = cipher.doFinal(tempStr.getBytes());
System.out.println("jdk enc:"+Hex.encodeHexString(doFinal));
//解密
cipher.init(Cipher.DECRYPT_MODE, key,pbeParameterSpec);
doFinal=cipher.doFinal(doFinal);
System.out.println("jdk dsc:"+new String(doFinal));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}