DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。 
   DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如 Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致 的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的 Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。 
  通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。

下面是具体代码:(切记切记 字符串转字节或字节转字符串时 一定要加上编码,否则可能出现乱码)

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;/*** DES加密 解密算法* * @author lifq* @date 2015-3-17 上午10:12:11*/
public class DesUtil {private final static String DES = "DES";private final static String ENCODE = "GBK";private final static String defaultKey = "test1234";public static void main(String[] args) throws Exception {String data = "测试ss";// System.err.println(encrypt(data, key));// System.err.println(decrypt(encrypt(data, key), key));
        System.out.println(encrypt(data));System.out.println(decrypt(encrypt(data)));}/*** 使用 默认key 加密* * @return String* @author lifq* @date 2015-3-17 下午02:46:43*/public static String encrypt(String data) throws Exception {byte[] bt = encrypt(data.getBytes(ENCODE), defaultKey.getBytes(ENCODE));String strs = new BASE64Encoder().encode(bt);return strs;}/*** 使用 默认key 解密* * @return String* @author lifq* @date 2015-3-17 下午02:49:52*/public static String decrypt(String data) throws IOException, Exception {if (data == null)return null;BASE64Decoder decoder = new BASE64Decoder();byte[] buf = decoder.decodeBuffer(data);byte[] bt = decrypt(buf, defaultKey.getBytes(ENCODE));return new String(bt, ENCODE);}/*** Description 根据键值进行加密* * @param data* @param key*            加密键byte数组* @return* @throws Exception*/public static String encrypt(String data, String key) throws Exception {byte[] bt = encrypt(data.getBytes(ENCODE), defaultKey.getBytes(ENCODE));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(ENCODE));return new String(bt, ENCODE);}/*** 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);}
}

转载于:https://www.cnblogs.com/haha12/p/4344957.html

java 实现 DES加密 解密算法相关推荐

  1. DES加密解密算法Java实现

    DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小.这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半.使用子密钥对其中一半应 ...

  2. Java简单实现DES加密解密算法

    Java简单实现DES加密解密算法 文章目录 Java简单实现DES加密解密算法 DES算法介绍 实现相关java类 代码实现 DES算法介绍 DEC加密算法属于对称加密,即利用指定的密钥,按照密码的 ...

  3. DES加密解密算法(前端后端)

    DES加密解密算法(前端&后端) 原作者 阿弥陀佛1114  原文链接:https://blog.csdn.net/zong1114/article/details/51754470 DES对 ...

  4. php与java的des加密解密

    与第三方接口对接des加密.解密,第三方提供java的des加密解密demo,特记录PHP与java加密解密. import javax.crypto.*; import javax.crypto.s ...

  5. Java实现DES加密解密

    DES(Data Encryption Standard)是一种对称加密算法,所谓对称加密就是加密和解密都是使用同一个密钥. 加密原理: DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位, ...

  6. C# DES加密解密算法

    C# DES加密解密算法 #region DES Class /// <summary> /// ClassName: DES 加密类 /// DES加密.解密类库,字符串加密结果使用BA ...

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

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

  8. iOS开发-DES加密解密算法

    前几天后台给了一个Java代码的加解密方式,让我这边直接用.我对应着Java上解密方法找到一些适合iOS的DES加解密算法,特总结一下 1.使用DES加密: //加密 +(NSString *) en ...

  9. java实现DES加解密算法

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

最新文章

  1. SQL Server-流程控制 5,Goto 语句
  2. rocktmq 消息延时清空_使用Kotlin+RocketMQ实现延时消息的示例代码
  3. java B2B2C springmvc mybatis多租户电子商城系统(三):服务提供与调用
  4. centos7 安装配置openstack-dashboard (官网openstack-juno版)
  5. BAT批处理文件无法运行提示“/E /I /Y ‘XCOPY‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”解决方法
  6. 自定义Excel下拉菜单
  7. spring中bean的高级属性之list, set, map以及props元素(含举例)
  8. ThinkPHP- 3.1
  9. php搜索所有路线,php包含文件路径查找规则
  10. 解决CentOS6.x或RedHat Linux 6.x版本不能通过System eth0以固定IP访问外网的问题
  11. 僵化封闭的苹果:鼠标不支持右键,键盘没有DEL键
  12. matlab在神经网络中的应用,应用matlab实现神经网络
  13. linux红帽子安装ftp,Red Hat Enterprise Linux 5 (红帽子企业版5)下Samba, VSFTP配置与安装...
  14. 【万人独木桥】那个夏天—后高考生活该如何安排?
  15. 【许晓笛】 EOS智能合约案例解析(1) 1
  16. 最小二乘法多元函数超曲面拟合(python)
  17. Elasticsearch的ETL利器——Ingest节点
  18. PHP税前税后,请问下大家 怎么根据税后工资1万元推算出税前工资是多少
  19. Presto 0.244.1 aarch64编译
  20. oracle jdbc执行,java jdbc 执行oracle存储过程

热门文章

  1. 网络推广专员浅析网络推广中如何分析网站建设水平孰优孰劣?
  2. 网络推广——网络推广专员如何提升企业网站转化率?
  3. python时间序列因果检验_Python Statsmodels的时间序列Ljung_Box检验
  4. Macbook 无法找到Centos启动盘问题解决
  5. 手写汉字笔迹识别模型汇总
  6. Xshell dns tunnel攻击
  7. Druid.io索引过程分析——时间窗,列存储,LSM树,充分利用内存,concise压缩
  8. SQLALchemy 从数据库导出model
  9. js调用ios和安卓方法
  10. 练习题3(求四位会员卡号之和)