J2SE Java中3DES加密解密调用示例
在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为被加密的数据缓冲区(源)
publicstaticbyteencryptMode(bytekeybyte,bytesrc){
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为加密后的缓冲区
publicstaticbytedecryptMode(bytekeybyte,bytesrc){
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(byteb){
Stringhs=""<
SPAN>;
Stringstmp="";
for(intn=0;nbr /> stmp=(java.lang.Integer.toHexString(b[n]&0XFF));
if(stmp.length==1)hs=hs+"0"+stmp;
elsehs=hs+stmp;
if(nbr /> }
returnhs.toUpperCase;
}
publicstaticvoidmain(Stringargs){
//添加新安全算法,如果用JCE就要把它添加进去
Security.addProvider(newcom.sun.crypto.provider.SunJCE);
finalbytekeyBytes={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="Thisisa3DEStest.测试";
System.out.println("加密前的字符串:"+szSrc);
byteencoded=encryptMode(keyBytes,szSrc.getBytes);
System.out.println("加密后的字符串:"+newString(encoded));
bytesrcBytes=decryptMode(keyBytes,encoded);
System.out.println("解密后的字符串:"+(newString(srcBytes)));
}
}
查看评论 回复