請在后臺配置參數,參數名稱:topads
編程語言 php java

Java進行3DES加密解密算法實現

java HTML我幫您 1年前  261次瀏覽
3DES(即Triple DES)是DES向AES過渡的加密算法(1999年,NIST將3-DES指定為過渡的加密標準),加密算法,其具體實現如下:設Ek()和Dk()代表DES算法的加密和解密過程,K代表DES算法使用的密鑰,P代表明文,C代表密文,這樣:
3DES加密過程為:C=Ek3(Dk2(Ek1(P)))
3DES解密過程為:P=Dk1(EK2(Dk3(C)))

   import java.security.Security;  
import java.util.Arrays;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;

/***
* bcprov-jdk15on-150.jar
*
* @ClassName Test3DES
* @author html580.com
* @date 2014年6月16日
*/
public class Test3DES {

public static void main(String<> args) throws Exception {
String key = "30313233343536373938373635343332";
String data = "0088757365722020202020202020202020202020202020202020202020202013111816000001123456bc445951f5f60762f951146ece3bed0fbde2c4198f7dc43018f1d5f2c807c47f26FFD30AAF8E3823";
String result = encryptStr(data,key);
System.out.println("加密后:"+result);

System.out.println("解密后:"+decryptStr(result,key));
}

/**
* 3DES加密 (亦稱為:DESede加密)
*
* CBC模式
* 填充模式:零字節填充 ZeroBytePadding
*
* @Method: encrypt3Str
* @param @param data
* @param @param key
* @param @return
* @param @throws Exception
* @return String
* @throws
*/
public static String encryptStr(String data,String key) throws Exception {
String result = "";
try {
Security.addProvider(new BouncyCastleProvider());
byte<> bKey = Hex.decode(key);//十六進制轉換成字節數據
byte<> bMsg = Hex.decode(data);

byte<> keyBytes = Arrays.copyOf(bKey, 24);
int j = 0, k = 16;
while (j < 8) {
keyBytes = keyBytes;
}

SecretKey key3 = new SecretKeySpec(keyBytes, "DESede");
IvParameterSpec iv3 = new IvParameterSpec(new byte<8>);//初始向量默認 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
Cipher cipher3 = Cipher.getInstance("DESede/CBC/ZeroBytePadding"); //DESede/CBC/ZeroBytePadding,DESede/ECB/NoPadding,DESede/CBC/NoPadding,DES/ECB/PKCS5Padding 根據具體情況來定,有些不需要使用到向量的,去掉向量
cipher3.init(Cipher.ENCRYPT_MODE, key3, iv3);

byte<> bMac = cipher3.doFinal(bMsg);
result= new String(Hex.encode(bMac));//encode方法字節數組轉換成十六進制
} catch (Exception e) {
e.printStackTrace();
throw e;
}
return result;
}

/**
* 3DES 解密
* @Method: decryptStr
* @param @param data
* @param @param key
* @param @return
* @param @throws Exception
* @return String
* @throws
*/
public static String decryptStr(String data,String key) throws Exception{
String result = "";
try {
Security.addProvider(new BouncyCastleProvider());
byte<> bKey = Hex.decode(key);//十六進制轉換成字節數據
byte<> bMsg = Hex.decode(data);

byte<> keyBytes = Arrays.copyOf(bKey, 24);
int j = 0, k = 16;
while (j < 8) {
keyBytes = keyBytes;
}

SecretKey key3 = new SecretKeySpec(keyBytes, "DESede");
IvParameterSpec iv3 = new IvParameterSpec(new byte<8>);//初始向量默認 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
Cipher cipher3 = Cipher.getInstance("DESede/CBC/ZeroBytePadding");
cipher3.init(Cipher.DECRYPT_MODE, key3, iv3);

byte<> bMac = cipher3.doFinal(bMsg);
result= new String(Hex.encode(bMac));//encode方法字節數組轉換成十六進制
} catch (Exception e) {
e.printStackTrace();
throw e;
}
return result;
}
}



發表評論

经典黑杰克游戏 爱彩网爱快乐时时彩 下载西瓜视频 看文章赚钱软件 大玩家十三水官方网站 天天爱海南麻将最新版 山东麻将258将规则 河北十一选五任五遗漏 上海快3详情走势图 枣庄同城游官网 重庆时时彩苹果版免费 亚上彩网址 吉林快三网上 qq分分彩是什么 1993年象棋冠军邓有帮 篮彩让分胜负什么意思 苹果软件赚钱达人 000878股票行情