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; }