import java.io.IOException; import java.security.SecureRandom;
import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec;
import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder;
public class DesUtil {
private final static String DES = "DES";
public static void main(String[] args) throws Exception {
String data = "123 456";
String key = "wang!@#$%";
System.err.println(encrypt(data, key));
System.err.println(decrypt(encrypt(data, key), key));
}
/**
* Description 根据键值进行加密
* @param data
* @param key 加密键byte数组
* @return
* @throws Exception
*/
public static String encrypt(String data, String key) throws Exception {
byte[] bt = encrypt(data.getBytes(), key.getBytes());
String strs = new BASE64Encoder().encode(bt);
return strs;
}
/**
* Description 根据键值进行解密
* @param data
* @param key 加密键byte数组
* @return
* @throws IOException
* @throws Exception
*/
public static String decrypt(String data, String key) throws IOException,
Exception {
if (data == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
byte[] buf = decoder.decodeBuffer(data);
byte[] bt = decrypt(buf,key.getBytes());
return new String(bt);
}
/**
* Description 根据键值进行加密
* @param data
* @param key 加密键byte数组
* @return
* @throws Exception
*/
private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
/**
* Description 根据键值进行解密
* @param data
* @param key 加密键byte数组
* @return
* @throws Exception
*/
private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
}
转自http://www.oschina.net/code/snippet_727646_18383
分享到:
相关推荐
DES的java代码,有界面,好用,是个很好的学习的例子
用java编写的des算法,通俗易懂,适合学习网络安全的同学借鉴
java代码-使用java解决DES加密解密的源代码 ——学习参考资料:仅用于个人学习使用!
DES及其3种改进版CBC,CFB,OFB加密模式编程实现,DES采用java提供的加密类Cipher实现。CBC,CFB,OFB给予自己写的DES类实现,有加密过程,可参考学习密码学。
java代码-使用java解决3DES加密解密的源代码 ——学习参考资料:仅用于个人学习使用!
此资源为des算法加解密的java完美实现,可导入环境直接运行。适合初学者对于des加密的学习和理解。资源分享出来,赚赚积分!感谢大家
DES数据加密算法,网络安全中较为基础的算法之一,用于学习交流使用
JAVA中3des加密算法.pdf 学习资料 复习资料 教学资源
关于DES的加密和解密 和大家一起分享了哦! 希望大家互相学习了哦!
DES密码算法Java实现 有简单的界面使用彭长根老师的现代密码学趣味之旅
一个完整的3DES加解密方法。代码简单、易懂,适合学习用。
这是des算法的java实现.DES加密算法的实现很简单,很适合初学者来学习参考
自己写的 将 DES和RSA结合在一起的一个加密程序 有面板,自己打包成jar就可以单独使用了 为了方便学习 我把整个项目传上去了
java编写的面向对象的DES算法,学习网络安全的同学可以借鉴阅读
提供了2种加密方式的学习,3DES和交换,各取所需。直接用eclipse导入即可。
用java写的一个DES的简单实现。文件中是java源码和我写的注释。希望能给大家在学习DES的过程中提供帮助。
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...
包括java自定义加密解密实例,异或加密解密实例,AES加密解密,DES加密解密 对文件加密建议使用DES方式 技术学习交流:635278789
毕业设计 基于java+DES加密的即时通信聊天系统源码+部署文档+全部数据资料(优秀项目).zip毕业设计 基于java+DES加密的即时通信聊天系统源码+部署文档+全部数据资料(优秀项目).zip毕业设计 基于java+DES加密的...