【数据加密】Java中3DES加密解密调用示例

来源:互联网 发布:时速4000超级列车 知乎 编辑:程序博客网 时间:2024/05/22 12:33
在java中调用sun公司提供的3DES加密解密算法时,需要使用到$JAVA_HOME/jre/lib/目录下如下的4个jar包:
jce.jar
security/US_export_policy.jar
security/local_policy.jar
ext/sunjce_provider.jar

Java运行时会自动加载这些包,因此对于带main函数的应用程序不需要设置到CLASSPATH环境变量中。对于WEB应用,不需要把这些包加到WEB-INF/lib目录下。

以下是java中调用sun公司提供的3DES加密解密算法的样本代码:

  1. /*字符串 DESede(3DES) 加密*/
  2. import java.security.*;
  3. import javax.crypto.*;
  4. import javax.crypto.spec.SecretKeySpec;
  5. public class ThreeDes {    
  6.     private static final String Algorithm = "DESede"//定义 加密算法,可用 DES,DESede,Blowfish       
  7.     
  8.     //keybyte为加密密钥,长度为24字节    
  9.     //src为被加密的数据缓冲区(源)    
  10.    public static byte[] encryptMode(byte[] keybyte, byte[] src) {       
  11.    try {            
  12.         //生成密钥            
  13.         SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);            
  14.         //加密            
  15.         Cipher c1 = Cipher.getInstance(Algorithm);            
  16.         c1.init(Cipher.ENCRYPT_MODE, deskey);            
  17.         return c1.doFinal(src);        
  18.         } 
  19.         catch (java.security.NoSuchAlgorithmException e1) {            
  20.             e1.printStackTrace();        
  21.             } 
  22.         catch (javax.crypto.NoSuchPaddingException e2) {           
  23.             e2.printStackTrace();        
  24.             } 
  25.         catch (java.lang.Exception e3) {            
  26.             e3.printStackTrace();        
  27.             }        
  28.         return null;    
  29.         }    
  30.    
  31.    //keybyte为加密密钥,长度为24字节    
  32.    //src为加密后的缓冲区  
  33.     public static byte[] decryptMode(byte[] keybyte, byte[] src) {          
  34.         try {            
  35.             //生成密钥            
  36.             SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);        
  37.             //解密       
  38.             Cipher c1 = Cipher.getInstance(Algorithm);          
  39.             c1.init(Cipher.DECRYPT_MODE, deskey);           
  40.             return c1.doFinal(src);        
  41.             } 
  42.         catch (java.security.NoSuchAlgorithmException e1) {       
  43.             e1.printStackTrace();        
  44.             } 
  45.         catch (javax.crypto.NoSuchPaddingException e2) {        
  46.             e2.printStackTrace();        
  47.             } 
  48.         catch (java.lang.Exception e3) {           
  49.             e3.printStackTrace();       
  50.         }       
  51.         return null;   
  52.         }    
  53.     
  54.     //转换成十六进制字符串   
  55. public static String byte2hex(byte[] b) {      
  56.     String hs="";        
  57.     String stmp="";       
  58.     for (int n=0;n<b.length;n++) {            
  59.         stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));          
  60.         if (stmp.length()==1) hs=hs+"0"+stmp;         
  61.         else hs=hs+stmp;            
  62.         if (n<b.length-1)  hs=hs+":";        
  63.         }       
  64.     return hs.toUpperCase();    
  65.     }    
  66. public static void main(String[] args){        
  67.     
  68.     //添加新安全算法,如果用JCE就要把它添加进去
  69.     Security.addProvider(new com.sun.crypto.provider.SunJCE());       
  70.     final byte[] keyBytes = {0x11, 0x22, 0x4F, 0x58, 
  71.             (byte)0x88, 0x10, 0x40, 0x38, 0x28, 0x25, 0x79, 0x51, 
  72.             (byte)0xCB, (byte)0xDD, 0x55, 0x66, 0x77, 0x29, 0x74, 
  73.             (byte)0x98, 0x30, 0x40, 0x36, (byte)0xE2
  74.             };  //24字节的密钥   
  75.     
  76.     String szSrc = "This is a 3DES test. 测试";                
  77.     System.out.println("加密前的字符串:" + szSrc);    
  78.     
  79.     byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());               
  80.     System.out.println("加密后的字符串:" + new String(encoded)); 
  81.     
  82.     byte[] srcBytes = decryptMode(keyBytes, encoded);    
  83.     System.out.println("解密后的字符串:" + (new String(srcBytes)));    
  84.     }
  85. }
原创粉丝点击