java

位置:IT落伍者 >> java >> 浏览文章

Java中3DES加密解密示例


发布日期:2019年04月14日
 
Java中3DES加密解密示例

在java中调用sun公司提供的DES加密解密算法时需要使用到$JAVA_HOME/jre/lib/目录下如下的个jar包

jcejar

security/US_export_policyjar

security/local_policyjar

ext/sunjce_providerjar

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

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

加密解密代码

import javasecuritySecurity;

import javaxcryptoCipher;

import javaxcryptoSecretKey;

import javaxcryptospecSecretKeySpec;

/*字符串 DESede(DES) 加密*/

public class ThreeDes {

/**

* @param args在java中调用sun公司提供的DES加密解密算法时需要使

* 用到$JAVA_HOME/jre/lib/目录下如下的个jar包

*jcejar

*security/US_export_policyjar

*security/local_policyjar

*ext/sunjce_providerjar

*/

private static final String Algorithm = DESede; //定义加密算法可用 DESDESedeBlowfish

//keybyte为加密密钥长度为字节

//src为被加密的数据缓沖区(源)

public static byte[] encryptMode(byte[] keybytebyte[] src){

try {

//生成密钥

SecretKey deskey = new SecretKeySpec(keybyte Algorithm);

//加密

Cipher c = CiphergetInstance(Algorithm);

cinit(CipherENCRYPT_MODE deskey);

return cdoFinal(src);//在单一方面的加密或解密

} catch (javasecurityNoSuchAlgorithmException e) {

// TODO: handle exception

eprintStackTrace();

}catch(javaxcryptoNoSuchPaddingException e){

eprintStackTrace();

}catch(javalangException e){

eprintStackTrace();

}

return null;

}

//keybyte为加密密钥长度为字节

//src为加密后的缓沖区

public static byte[] decryptMode(byte[] keybytebyte[] src){

try {

//生成密钥

SecretKey deskey = new SecretKeySpec(keybyte Algorithm);

//解密

Cipher c = CiphergetInstance(Algorithm);

cinit(CipherDECRYPT_MODE deskey);

return cdoFinal(src);

} catch (javasecurityNoSuchAlgorithmException e) {

// TODO: handle exception

eprintStackTrace();

}catch(javaxcryptoNoSuchPaddingException e){

eprintStackTrace();

}catch(javalangException e){

eprintStackTrace();

}

return null;

}

//转换成十六进制字符串

public static String byteHex(byte[] b){

String hs=;

String stmp=;

for(int n=; n<blength; n++){

stmp = (javalangIntegertoHexString(b[n]& XFF));

if(stmplength()==){

hs = hs + + stmp;

}else{

hs = hs + stmp;

}

if(n<blength)hs=hs+:;

}

return hstoUpperCase();

}

public static void main(String[] args) {

// TODO Autogenerated method stub

//添加新安全算法如果用JCE就要把它添加进去

SecurityaddProvider(new comsuncryptoproviderSunJCE());

final byte[] keyBytes = {x x xF x

(byte)x x x x x x x x

(byte)xCB

(byte)xDD x x x x x

(byte)x x x x

(byte)xE

}; //字节的密钥

String szSrc = This is a DES test 测试;

Systemoutprintln(加密前的字符串: + szSrc);

byte[] encoded = encryptMode(keyBytesszSrcgetBytes());

Systemoutprintln(加密后的字符串: + new String(encoded));

byte[] srcBytes = decryptMode(keyBytesencoded);

Systemoutprintln(解密后的字符串: + (new String(srcBytes)));

}

}

               

上一篇:Java线程通信源代码中的奥秘探究

下一篇:java源码分析之LinkedList