Java实现的3des加密解密工具类示例
本文实例讲述了Java实现的3des加密解密工具类。分享给大家供大家参考,具体如下:
packagecom.gcloud.common;
importorg.apache.poi.poifs.property.Child;
importorg.bouncycastle.jce.provider.BouncyCastleProvider;
importjavax.crypto.*;
importjavax.crypto.spec.IvParameterSpec;
importjavax.crypto.spec.SecretKeySpec;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.net.URL;
importjava.security.*;
importjava.security.spec.AlgorithmParameterSpec;
/**
*三重数据加密算法工具类
*Createdbycharlinon2017/9/11.
*/
publicclassV3DESUtil{
//密钥存放位置
publicstaticStringFILENAME="d:/3des.key";
//1为加密,0为解密
privateintisEncrypt=-1;
//加密/解密密钥,长度为16byte或者24byte。
privateStringkeyStr;
//要加密/解密信息(解密时需为十六进制显示的字符串)
privateStringmessage;
publicV3DESUtil(){
}
publicV3DESUtil(intisEncrypt,StringkeyStr,Stringmessage){
this.isEncrypt=isEncrypt;
this.keyStr=keyStr;
this.message=message;
}
//numStr=12345678
publicStringV3DESChiper(StringnumStr){
Stringresult=null;
try{
Security.addProvider(newBouncyCastleProvider());
URLurl=getClass().getResource(FILENAME);
FilemyFile=newFile(FILENAME);
if(!myFile.exists()){
return"Can'tFind"+FILENAME;
}
try{
BufferedReaderin=newBufferedReader(newInputStreamReader(url.openStream()));
while((keyStr=in.readLine())==null){
return"读取密钥失败!";
}
in.close();
}catch(IOExceptione){
e.printStackTrace();
}
SecretKeykey=newSecretKeySpec(keyStr.getBytes(),"DESede");
result=null;
byte[]textByte=null;
byte[]messageByte=null;
Ciphercipher=Cipher.getInstance("DESede/CBC/PKCS5Padding","BC");
AlgorithmParameterSpecspec=newIvParameterSpec(numStr.getBytes());
if(isEncrypt==1){
messageByte=message.getBytes();
cipher.init(Cipher.ENCRYPT_MODE,key,spec);
}elseif(isEncrypt==0){
messageByte=decodeHex(message);
cipher.init(Cipher.DECRYPT_MODE,key,spec);
}else{
return"加解密设置错误,请确认输入:1为加密;0为解密";
}
textByte=cipher.doFinal(messageByte);
if(isEncrypt==1){
result=encodeHex(textByte);
}elseif(isEncrypt==0){
result=newString(textByte);
}
}catch(Exceptione){
e.printStackTrace();
}
returnresult;
}
publicstaticfinalStringencodeHex(bytebytes[]){
StringBufferbuf=newStringBuffer(bytes.length*2);
for(inti=0;i'
case63://'?'
case64://'@'
case65://'A'
case66://'B'
case67://'C'
case68://'D'
case69://'E'
case70://'F'
case71://'G'
case72://'H'
case73://'I'
case74://'J'
case75://'K'
case76://'L'
case77://'M'
case78://'N'
case79://'O'
case80://'P'
case81://'Q'
case82://'R'
case83://'S'
case84://'T'
case85://'U'
case86://'V'
case87://'W'
case88://'X'
case89://'Y'
case90://'Z'
case91://'['
case92://'\\'
case93://']'
case94://'^'
case95://'_'
case96://'`'
default:
return0;
}
}
publicstaticStringgetFILENAME(){
returnFILENAME;
}
publicintgetIsEncrypt(){
returnisEncrypt;
}
publicvoidsetIsEncrypt(intisEncrypt){
this.isEncrypt=isEncrypt;
}
publicStringgetKeyStr(){
returnkeyStr;
}
publicvoidsetKeyStr(StringkeyStr){
this.keyStr=keyStr;
}
publicStringgetMessage(){
returnmessage;
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}
publicstaticvoidmain(String[]args){
Stringkey="yycg12345678901234567890";
Stringoldstring="test"+"#"+"test"+"#"+System.currentTimeMillis();
V3DESUtiltempDesEn=newV3DESUtil(1,oldstring,key);
StringstrTemp=tempDesEn.V3DESChiper("12345678");
System.out.println("strTemp==="+strTemp);
V3DESUtiltempDe=newV3DESUtil(0,strTemp,key);
StringstrTempDe=tempDe.V3DESChiper("12345678");
System.out.println("strTempDe==="+strTempDe);
}
}
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
MD5在线加密工具:
http://tools.jb51.net/password/CreateMD5Password
在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
更多关于java相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。