版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31301681/article/details/77754570
3DES 的实现方式:jdk 的实现 , BouncyCastle 的实现方式
/**
* jdk 3DES 生成秘钥
* @return
* @throws Exception
*/
public static byte [] JDK_3DES_GetSecretKey() throws Exception{
KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
keyGenerator.init(168); // 秘钥的长度 ,可使用 new SecureRandom() 生成默认长度的秘钥
SecretKey secretKey = keyGenerator.generateKey();
return secretKey.getEncoded();
}
/**
* 使用 3des 对数据进行加密
* @param src
* @param encryptKey
* @return
* @throws Exception
*/
public static byte [] JDK_3DES_Encrypt(String src,byte [] encryptKey) throws Exception{
//Key 的转换
DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
Key secretKey = factory.generateSecret(keySpec);
//加密
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte [] result = cipher.doFinal(src.getBytes());
return result;
}
/**
* 使用 3des 对数据进行解密
* @param encryptBytes
* @param encryptKey
* @return
* @throws Exception
*/
public static String JDK_3DES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{
//Key 的转换
DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
Key secretKey = factory.generateSecret(keySpec);
//解密
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
String result = new String(cipher.doFinal(encryptBytes));
return result;
}
/**
* bc 3DES 生成秘钥
* @return
* @throws Exception
*/
public static byte [] BC_3DES_GetSecretKey() throws Exception{
Security.addProvider(new BouncyCastleProvider());
KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede","BC");
keyGenerator.init(new SecureRandom()); // 秘钥的长度 new SecureRandom() 默认长度
SecretKey secretKey = keyGenerator.generateKey();
return secretKey.getEncoded();
}
/**
* 使用 3des 对数据进行加密
* @param src
* @param encryptKey
* @return
* @throws Exception
*/
public static byte [] BC_3DES_Encrypt(String src,byte [] encryptKey) throws Exception{
//Key 的转换
DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
Key secretKey = factory.generateSecret(keySpec);
//加密
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte [] result = cipher.doFinal(src.getBytes());
return result;
}
/**
* 使用 3des 对数据进行解密
* @param encryptBytes
* @param encryptKey
* @return
* @throws Exception
*/
public static String BC_3DES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{
//Key 的转换
DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
Key secretKey = factory.generateSecret(keySpec);
//解密
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
String result = new String(cipher.doFinal(encryptBytes));
return result;
}