【加密技术】对称加密算法(2):3DES

3DES 的实现方式:jdk 的实现 , BouncyCastle 的实现方式 


[java]  view plain  copy
  1.    /** 
  2.  * jdk 3DES 生成秘钥  
  3.  * @return 
  4.  * @throws Exception 
  5.  */  
  6. public static byte [] JDK_3DES_GetSecretKey() throws Exception{  
  7.     KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");  
  8.     keyGenerator.init(168);  // 秘钥的长度 ,可使用 new SecureRandom() 生成默认长度的秘钥  
  9.     SecretKey secretKey = keyGenerator.generateKey();  
  10.     return secretKey.getEncoded();  
  11. }  
  12.   
  13. /** 
  14.  * 使用 3des 对数据进行加密  
  15.  * @param src 
  16.  * @param encryptKey 
  17.  * @return 
  18.  * @throws Exception 
  19.  */  
  20. public static byte [] JDK_3DES_Encrypt(String src,byte [] encryptKey) throws Exception{  
  21.     //Key 的转换  
  22.     DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);  
  23.     SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");  
  24.     Key secretKey = factory.generateSecret(keySpec);  
  25.       
  26.     //加密  
  27.     Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");  
  28.     cipher.init(Cipher.ENCRYPT_MODE, secretKey);  
  29.     byte [] result = cipher.doFinal(src.getBytes());  
  30.     return result;  
  31. }  
  32.   
  33. /** 
  34.  * 使用 3des 对数据进行解密  
  35.  * @param encryptBytes 
  36.  * @param encryptKey 
  37.  * @return 
  38.  * @throws Exception 
  39.  */  
  40. public static String JDK_3DES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{  
  41.     //Key 的转换  
  42.     DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);  
  43.     SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");  
  44.     Key secretKey = factory.generateSecret(keySpec);  
  45.       
  46.     //解密  
  47.     Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");  
  48.     cipher.init(Cipher.DECRYPT_MODE, secretKey);  
  49.     String result = new String(cipher.doFinal(encryptBytes));  
  50.     return result;  
  51. }  
  52.   
  53. /** 
  54.  * bc 3DES 生成秘钥  
  55.  * @return 
  56.  * @throws Exception 
  57.  */  
  58. public static byte [] BC_3DES_GetSecretKey() throws Exception{  
  59.     Security.addProvider(new BouncyCastleProvider());  
  60.     KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede","BC");  
  61.     keyGenerator.init(new SecureRandom());  // 秘钥的长度  new SecureRandom() 默认长度  
  62.     SecretKey secretKey = keyGenerator.generateKey();  
  63.     return secretKey.getEncoded();  
  64. }  
  65.   
  66. /** 
  67.  * 使用 3des 对数据进行加密  
  68.  * @param src 
  69.  * @param encryptKey 
  70.  * @return 
  71.  * @throws Exception 
  72.  */  
  73. public static byte [] BC_3DES_Encrypt(String src,byte [] encryptKey) throws Exception{  
  74.     //Key 的转换  
  75.     DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);  
  76.     SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");  
  77.     Key secretKey = factory.generateSecret(keySpec);  
  78.       
  79.     //加密  
  80.     Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");  
  81.     cipher.init(Cipher.ENCRYPT_MODE, secretKey);  
  82.     byte [] result = cipher.doFinal(src.getBytes());  
  83.     return result;  
  84. }  
  85.   
  86. /** 
  87.  * 使用 3des 对数据进行解密  
  88.  * @param encryptBytes 
  89.  * @param encryptKey 
  90.  * @return 
  91.  * @throws Exception 
  92.  */  
  93. public static String BC_3DES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{  
  94.     //Key 的转换  
  95.     DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);  
  96.     SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");  
  97.     Key secretKey = factory.generateSecret(keySpec);  
  98.       
  99.     //解密  
  100.     Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");  
  101.     cipher.init(Cipher.DECRYPT_MODE, secretKey);  
  102.     String result = new String(cipher.doFinal(encryptBytes));  
  103.     return result;  
  104. }  

你可能感兴趣的:(【加密技术】对称加密算法(2):3DES)