<span style="font-size:18px;">import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class DES3 {
private static final String Algorithm = "DESede"; // 定义加密算法,可用
// keybyte为加密密钥,长度为24字节;
// src是源数据;
public static byte[] encryptMode(byte[] keybyte, byte[] src)
{
try
{
// 生成密钥
SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
// 加密
Cipher code = Cipher.getInstance(Algorithm);
code.init(Cipher.ENCRYPT_MODE, deskey);
return code.doFinal(src);
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
// keybyte为加密密钥,长度为24字节;
// src为加密后的数据;
public static byte[] decryptMode(byte[] keybyte, byte[] src)
{
try
{
// 生成密钥
SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
// 解密
Cipher code = Cipher.getInstance(Algorithm);
code.init(Cipher.DECRYPT_MODE, deskey);
return code.doFinal(src);
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
// 转换成十六进制字符串
public static String byte2hex(byte[] b)
{
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++)
{
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
{
hs = hs + "0" + stmp;
}
else
{
hs = hs + stmp;
}
if (n < b.length - 1)
{
hs = hs + ":";
}
}
return hs.toUpperCase();
}
public static void main(String[] args)
{
// 24字节的密钥
final byte[] keyBytes = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
0x31, 0x41, 0x51, 0x61, 0x71, 0x67};
String szSrc = "这是一个测试字符串aaabbbccc111222333";
System.out.println("加密前的字符串:" + szSrc);
byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());
System.out.println("加密后的字符串:" + new String(encoded));
System.out.println(byte2hex(encoded));
byte[] srcBytes = decryptMode(keyBytes, encoded);
System.out.println("解密后的字符串:" + (new String(srcBytes)));
}
}
</span>