当前位置:主页   - 电脑 - 程序设计 - JAVA
J2SE Java中3DES加密解密调用示例
来源:网络   作者:   更新时间:2012-06-07
收藏此页】    【字号    】    【打印】    【关闭

  在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加密解密算法的样本代码:

/*字符串DESede(3DES)加密*/
importjava.security.*;
importjavax.crypto.*;
importjavax.crypto.spec.SecretKeySpec;
publicclassThreeDes{  
  privatestaticfinalStringAlgorithm="DESede";//定义加密算法,可用DES,DESede,Blowfish    
  //keybyte为加密密钥,长度为24字节  
  //src为被加密的数据缓冲区(源)  
 publicstaticbyte[]encryptMode(byte[]keybyte,byte[]src){    
 try{      
    //生成密钥      
    SecretKeydeskey=newSecretKeySpec(keybyte,Algorithm);      
    //加密      
    Cipherc1=Cipher.getInstance(Algorithm);      
    c1.init(Cipher.ENCRYPT_MODE,deskey);      
    returnc1.doFinal(src);    
    } 
    catch(java.security.NoSuchAlgorithmExceptione1){      
      e1.printStackTrace();    
      } 
    catch(javax.crypto.NoSuchPaddingExceptione2){      
      e2.printStackTrace();    
      } 
    catch(java.lang.Exceptione3){      
      e3.printStackTrace();    
      }    
    returnnull;  
    }  
 //keybyte为加密密钥,长度为24字节  
 //src为加密后的缓冲区 
  publicstaticbyte[]decryptMode(byte[]keybyte,byte[]src){     
    try{      
      //生成密钥      
      SecretKeydeskey=newSecretKeySpec(keybyte,Algorithm);    
      //解密    
      Cipherc1=Cipher.getInstance(Algorithm);     
      c1.init(Cipher.DECRYPT_MODE,deskey);      
      returnc1.doFinal(src);    
      } 
    catch(java.security.NoSuchAlgorithmExceptione1){    
      e1.printStackTrace();    
      } 
    catch(javax.crypto.NoSuchPaddingExceptione2){    
      e2.printStackTrace();    
      } 
    catch(java.lang.Exceptione3){      
      e3.printStackTrace();    
    }    
    returnnull;  
    }  
  //转换成十六进制字符串  
publicstaticStringbyte2hex(byte[]b){   
  Stringhs=""<
SPAN>;    
  Stringstmp="";    
  for(intn=0;n<b.length;n++){      
    stmp=(java.lang.Integer.toHexString(b[n]&0XFF));     
    if(stmp.length()==1)hs=hs+"0"+stmp;     
    elsehs=hs+stmp;      
    if(n<b.length-1) hs=hs+":";    
    }    
  returnhs.toUpperCase();  
  }  
publicstaticvoidmain(String[]args){    
  //添加新安全算法,如果用JCE就要把它添加进去
  Security.addProvider(newcom.sun.crypto.provider.SunJCE());    
  finalbyte[]keyBytes={0x11,0x22,0x4F,0x58, 
      (byte)0x88,0x10,0x40,0x38,0x28,0x25,0x79,0x51, 
      (byte)0xCB,(byte)0xDD,0x55,0x66,0x77,0x29,0x74, 
      (byte)0x98,0x30,0x40,0x36,(byte)0xE2
      }; //24字节的密钥  
  StringszSrc=http://tech.ddvip.com/2008-12/"Thisisa3DEStest.测试";        
  System.out.println("加密前的字符串:"+szSrc);  
  byte[]encoded=encryptMode(keyBytes,szSrc.getBytes());        
  System.out.println("加密后的字符串:"+newString(encoded)); 
  byte[]srcBytes=decryptMode(keyBytes,encoded);  
  System.out.println("解密后的字符串:"+(newString(srcBytes)));  
  }
}

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明