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