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