//转byte应该要指定编码方式(不然可能会出错)
//PASSWORD_CRYPT_KEY需要为八位字节
package com.global.util;import java.io.UnsupportedEncodingException;
import java.security.*;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;import junit.framework.TestCase;public class CodeUtil extends TestCase{private static final String PASSWORD_CRYPT_KEY = "_kong____";private final static String DES = "DES";/*** 加密* @param src 数据源* @param key 密钥,长度必须是8的倍数* @return  返回加密后的数据* @throws Exception*/public static byte[] encrypt(byte[] src, byte[] key)throws Exception {//DES算法要求有一个可信任的随机数源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(src);}/*** 解密* @param src 数据源* @param key 密钥,长度必须是8的倍数* @return   返回解密后的原始数据* @throws Exception*/public static byte[] decrypt(byte[] src, byte[] key)throws Exception {// DES算法要求有一个可信任的随机数源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(src);}/*** 密码解密* @param data* @return* @throws Exception*/public final static String decoder(String data){try {return new String(decrypt(hex2byte(data.getBytes("ISO-8859-1")),PASSWORD_CRYPT_KEY.getBytes("ISO-8859-1")));}catch(Exception e) {}return null;}/*** 密码加密* @param password* @return* @throws Exception*/public final static String encoder(String password){try {return byte2hex(encrypt(password.getBytes("ISO-8859-1"),PASSWORD_CRYPT_KEY.getBytes("ISO-8859-1")));}catch(Exception e) {}return null;}/*** 二行制转字符串* @param b* @return*/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;elsehs = hs + stmp;}return hs.toUpperCase();}public static byte[] hex2byte(byte[] b) {if((b.length%2)!=0)throw new IllegalArgumentException("长度不是偶数");byte[] b2 = new byte[b.length/2];for (int n = 0; n < b.length; n+=2) {String item = new String(b,n,2);b2[n/2] = (byte)Integer.parseInt(item,16);}return b2;}public void test() throws UnsupportedEncodingException{String a = "zhazha";String b = byte2hex(a.getBytes("ISO-8859-1"));//String c = encrypt(b);System.out.println(decoder(encoder(a)));}
}

转载于:https://www.cnblogs.com/wead-hsu/p/3712280.html

Java中实现DES加解密的一个类相关推荐

  1. 在Java中使用DES加密解密算法

    import javax.crypto.*; import javax.crypto.spec.DESKeySpec; import java.security.NoSuchAlgorithmExce ...

  2. Java中的RSA加解密工具类:RSAUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt;import com.mirana.frame.utils.log.LogUtils; ...

  3. java 线程加载类_怎么判断java当前线程是否加载了一个类的字节码

    展开全部 原生的ClassLoader是有e68a843231313335323631343130323136353331333337616631一个方法判断类是否已经加载的/** * Returns ...

  4. C#中的DES加解密方法

    const string KEY_64 = "VavicApp"; const string IV_64 = "VavicApp"; //注意了,是8个字符,6 ...

  5. java aes 工具类_Java中的AES加解密工具类:AESUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...

  6. 一个java的DES加解密类转换成C#

    原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util;import java.security.*; //im ...

  7. java 和 c# 下的RSA证书+AES+DES加解密实现

    java 和 c# 下的RSA+AES+DES加解密实现 前言 在实际应用中,经常有需要使用加解密的情况,RSA\AES\DES是比较常用的几种加解密方式,使用和实现方式都比较成熟可靠,本文简要介绍一 ...

  8. 【密码学】DES加解密原理及其Java实现算法

    DES简介 DES(Data Encryption Standard)是对称加解密算法的一种,由IBM公司W.Tuchman和C.Meyer在上个世纪70年代开发. 该算法使用64位密钥(其中包含8位 ...

  9. java实现DES加解密算法

    以下是我用java实现的DES算法,实现中可能存在一点问题自己没空去找,但我觉得DES的算法过程肯定没错!现在暂时没时间去找到底是哪里的问题,有空再瞧瞧自己的代码喽! makekey.java是生成密 ...

最新文章

  1. php连接plc,PLC 几种常见的连接口和通讯协议
  2. Vue.js——十分钟入门Vuex
  3. Python深浅拷贝教程-面试必问内容
  4. C 语言资源大全中文版
  5. “QMYSQL: Unable to allocate a MYSQL object“ 解决方法
  6. Python爬虫入门七正则表达式
  7. 前端错误捕获终级方案
  8. OSI参考模型和TCP/IP参考模型-详解
  9. 为什么每个人都有发旋?
  10. python大作业 课设
  11. 数字化中台前导--企业架构TOGAF简介
  12. web渗透--4--web渗透测试清单
  13. 如何解析二维码,获取二维码里的参数供下一个接口使用
  14. 如何利用PyTorch实现一个Encoder-Decoder结构进行英法互译
  15. java中函数编程的妙用
  16. Arduino与Matlab的串口通讯:通过光敏电阻进行人数统计,以及改进:人物方向的判断并进行加减。
  17. 生信学习笔记:fastp质控处理生成的report结果解读
  18. 【WinRAR】WinRAR 6.02 官方最新简体中文版
  19. html科学计算器,vue.js实现的经典计算器/科学计算器功能示例
  20. 计算机科学与技术(云计算方向),2019年枣庄学院本科计算机科学与技术(云计算方向)...

热门文章

  1. LeetCode--Excel Sheet Column Number
  2. McAfee----McAfee 2008 中文版
  3. 如何用matlab测a相相电流,电流平均值谐波检测方法MATLAB仿真
  4. HTTPS访问站点,出现证书问题解决
  5. Java后台返回和处理JSon数据的方法
  6. 容器网络规范CNM vs. CNI
  7. .NET中书写XML的一种简单方法
  8. CGRect CGFloat 不能使用
  9. java 日志脱敏框架 sensitive,优雅的打印脱敏日志
  10. 仿QQ6 0侧滑之ViewDragHelper的使用(一)