1、DES算法:
/**
* 加解密算法
* @param data 加解密数据
* @param key 秘钥
* @param mode 模式
* @return 加解密结果
*/
public static byte[] desCryt(byte[] data, byte[] key, int mode){
byte[] result = null ;
try {
SecureRandom sr = new SecureRandom();
SecretKeyFactory keyFactory;
DESKeySpec dks = new DESKeySpec(key);
keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretkey = keyFactory.generateSecret(dks);
//创建Cipher对象
Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
//初始化Cipher对象
cipher.init(mode, secretkey, sr);
//加解密
result = cipher.doFinal(data);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return result;
}
2、byte数组转换成16进制字符串
/**
* byte数组转换成16进制字符串
* @param b
* @return
*/
public static String bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}
3、16进制字符串转成byte数组
/**
* 16进制字符串转成byte数组
* @param src
* @return
*/
public static byte[] hexString2Bytes(String src){
byte[] ret = new byte[8];
byte[] tmp = src.getBytes();
for(int i=0; i<8; i++){
ret[i] = uniteBytes(tmp[i*2], tmp[i*2+1]);
}
return ret;
}
public static byte uniteBytes(byte src0, byte src1) {
byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue();
_b0 = (byte)(_b0 << 4);
byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue();
byte ret = (byte)(_b0 ^ _b1);
return ret;
}
执行
public static void main(String[] args) {
//加解密模式
int mode = Cipher.ENCRYPT_MODE;
//被加解密byte数组16进制字符串
String dataHexString = "1234567887654321";
//秘钥byte数组16进制字符串
String keyHexString = "9AAB1D2EE004AAC3";
byte[] data = hexString2Bytes(dataHexString);
byte[] key = hexString2Bytes(keyHexString);
byte[] result = desCryt(data, key, mode);
//打印结果
System.out.println("结果:"+bytes2HexString(result));
}
结果:7D592BF239849E76
执行
public static void main(String[] args) {
//加解密模式
int mode = Cipher.DECRYPT_MODE;
//被加解密byte数组16进制字符串
String dataHexString = "7D592BF239849E76";
//秘钥byte数组16进制字符串
String keyHexString = "9AAB1D2EE004AAC3";
byte[] data = hexString2Bytes(dataHexString);
byte[] key = hexString2Bytes(keyHexString);
byte[] result = desCryt(data, key, mode);
//打印结果
System.out.println("结果:"+bytes2HexString(result));
}
结果:1234567887654321
PS:
获取Cipher对象的时候一定要写成
Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
不要写成
Cipher cipher = Cipher.getInstance("DES");
否则解密的时候会报错:
Given final block not properly padded
原因是Cipher cipher = Cipher.getInstance("DES");与Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");等同,填充方式错误,加密的时候会得到16长度的字节数组。
JCE详解传送门:http://docs.oracle.com/javase/1.5.0/docs/guide/security/jce/JCERefGuide.html
附件是DES算法原理说明
分享到:
相关推荐
JAVA语言编写的DES算法,自己做毕设用到的
本程序是java语言实现的DES加密算法的实例。
DES加密算法JAVA语言设计代码,是非常重要的加密技术
2. 统计DES算法在密钥固定情况,输入明文改变1位、2位,。。。64位时。输出密文位数改变情况。 3. 统计DES算法在明文固定情况,输入密钥改变1位、2位,。。。64位时。输出密文位数改变情况。 为了具有客观性,2,3...
本DES算法是java语言写的,为了赚点积分下载自己需要的东西。谢谢大家!其实什么语言写是无所谓的,关键是一些基本模块的编写及相应的调用!
这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。...本软件是用java语言开发,实现了AES算法对文件的加密和解密,并在界面上加了进度条,来提示用户加密解密的进度。如果不足之处,欢迎留言。
通过对DES算法的流程分析,采用java代码实现DES加解密的功能,其中并未采用javax包中的相关代码!
转 JAVA加密解密DES对称加密算法.doc
java语言编写的,通过实现DES算法对文件进行加解密,是单机版的小程序,有简易的图形界面,可以修改密钥,可以对150MB以上的文件进行快速加解密
DES加密算法基本功能Java实现源程序 确保“aa.txt”文件存在且在同一个目录中,否则将会报找不到加密文件的错误!
JSP 基于DES算法管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,mysql数据库存储,系统主要采用B/S模式开发。 二、功能介绍 程序文本相似比较系统要满足以下...
用des算法对文件进行加解密 java语言实现
Java c++通过des加密的结果不一样【已解决】 最近做了一个接口,需要和C++进行通讯,通讯的参数采用des加密,但调试的时候却发现同样的明文和密钥加密出来的结果却是不一样的。 收藏网络总结代码
Java实现3DES加解密算法
用Java加密类实现DES、RSA及SHA的加密算法
这是本人完成的课程设计,内容是用java语言实现对文件的加密解密操作,算法采用的是3DES
DES数据加密算法是最著名的对称密钥加密算法,在计算机密码学及计算机数据通信的发展过程中起着重要的作用。分析了DES数据加密算法的基本原理,用java语言实现了对文件的加密。
用Java编写的des加解密算法,参照的c语言的加解密过程,支持3des加密
常见的加密算法实现--Java语言编写,花费一个多月认真整理出来的可直接运行的源码文件。下载RAR文件后,对压缩包进行解压后,里面有详细的例子,导入IDEA或者ECLIPSE后,运行指定的Java文件,即可以直接使用。压缩包...
用java 语言实现DES的加密解密算法。