Java DES 加密和解密源码
2016-01-08 17:22
337 查看
工具类:
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);</span><span style="font-size: 18px;">return cipher.doFinal(data);}}测试类:
public class DTest {/*** @param args* @throws Exception*/public static void main(String[] args) throws Exception {// TODO Auto-generated method stubtry {//要被加密内容String test = "Hello World";//密钥String key = "12345678";System.out.println("加密前的字符:" + test);System.out.println("加密后的字符:" + DESUtil.encrypt(test, key));System.out.println("解密后的字符:" + DESUtil.decrypt(DESUtil.encrypt(test, key), key));System.out.println("解密后的字符长度:" + (DESUtil.decrypt(DESUtil.encrypt(test, key), key)).length());} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}
相关文章推荐
- 对Ansible二次开发来检查服务器的Java程序占用端口数量
- Java 日志管理最佳实践
- java中Double类数字太大时页面正常显示而不要用科学计数法
- Java - MultipartFile图片上传服务器,并且指定大小压缩
- Hibernate - Spring 整合基础实例 《二》
- Debugging with Eclipse & JPDA
- Spring中原型prototype的准确使用
- JAVA中int、String的类型转换
- struts2 中获取 web资源的方式
- myeclipse实用快捷键
- 整合Struts2,Spring,Hibernate
- 《JAVA与模式》之责任链模式
- Java web service例子
- 各大系统如何接入统一的登录认证
- Java获取服务器网址
- Java_DecimalFormat的主要功能及使用方法
- Java向MySQL数据库插入时间类型Date数据时需要注意的问题(二)
- Java学习笔记之Java语言基础组成
- Eclipse导入代码@Override和代码排列缩进出问题
- java设置响应头,解决跨域访问限制