DES解密是加密的逆过程。对于DES加密过程可以用以下数学公式来描述:

其中,Li和Ri是当前进行加密操作的明文的左32位和右32位,而Li-1和Ri-1是前一次进行操作的明文的左32位和右32位。Ki是64位密钥经过算法产生的子密钥。而解密过程可以用如下数学公式来描述:

由此可以看出,DES的解密操作是加密操作的反向逆过程。对于第二个公式可以做如下推导:

上述最后一行式子经过化简发现等式左边等于右边,显然上述公式成立。学过数字电子技术的同学应该对上述公式推导的计算方法并不陌生。
以下是通过java实现的DES解码操作:

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;public class DESDemo {public static void main(String[] args) throws Exception{System.out.println("请输入明文:");Scanner in=new Scanner(System.in);String clearText=in.nextLine();System.out.println("请输入密钥:");Scanner in1=new Scanner(System.in);String originKey=in1.nextLine();String cipherText = desEncript(clearText, originKey);System.out.println("通过DES加密后的结果是:");System.out.println(cipherText);String clearText1=desDecript(cipherText,originKey);System.out.println("解密结果是:\n"+clearText1);}/*** 加密算法* @param clearText* @param originKey* @return* @throws NoSuchAlgorithmException* @throws NoSuchPaddingException* @throws InvalidKeyException* @throws BadPaddingException* @throws IllegalBlockSizeException*/private static String desEncript(String clearText, String originKey) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException{Cipher cipher=Cipher.getInstance("DES"); /*提供加密的方式:DES*/SecretKeySpec key=getKey(originKey);  /*对密钥进行操作,产生16个48位长的子密钥*/cipher.init(Cipher.ENCRYPT_MODE,key); /*初始化cipher,选定模式,这里为加密模式,并同时传入密钥*/byte[] doFinal=cipher.doFinal(clearText.getBytes());   /*开始加密操作*/String encode= Base64.encode(doFinal);    /*对加密后的数据按照Base64进行编码*/return encode;}/*** 解密算法* @param cipherText* @param originKey* @return* @throws BadPaddingException* @throws IllegalBlockSizeException* @throws NoSuchPaddingException* @throws NoSuchAlgorithmException* @throws InvalidKeyException*/private static String desDecript(String cipherText, String originKey) throws BadPaddingException, IllegalBlockSizeException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException{Cipher cipher=Cipher.getInstance("DES");   /*初始化加密方式*/Key key=getKey(originKey);  /*获取密钥*/cipher.init(Cipher.DECRYPT_MODE,key);  /*初始化操作方式*/byte[] decode=Base64.decode(cipherText);  /*按照Base64解码*/byte[] doFinal=cipher.doFinal(decode);   /*执行解码操作*/return new String(doFinal);   /*转换成相应字符串并返回*/}/*** 获取密钥算法* @param originKey* @return*/private static SecretKeySpec getKey(String originKey){byte[] buffer=new byte[8];byte[] originBytes=originKey.getBytes();/*** 防止输入的密钥长度超过64位*/for(int i=0;i<8&&i<originBytes.length;i++){buffer[i]=originBytes[i];  /*如果originBytes不足8,buffer剩余的补零*/}SecretKeySpec key=new SecretKeySpec(buffer,"DES"); /*第一个参数是密钥字节数组,第二个参数是加密方式*/return key;  /*返回操作之后得到的密钥*/}
}

程序运行结果如下所示:

用java实现DES解密相关推荐

  1. java des解密乱码_des解密不完整,前面几位是乱码的解决办法

    在工作中遇到的Des解密问题,第三方发来的数据需要我们进行des解密,但是解密的结果前几位始终是乱码.废了半天劲,终于找到了问题所在. 下面先介绍一下des,了解des的同学可以直接看下面的解决办法. ...

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

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

  3. Linux下运行java DES解密失败,报javax.crypto.BadPaddingException:Given final block not properly padded

    参考:http://blog.csdn.net/rj042/article/details/8196125 单点登录:https://github.com/ebnew/ki4so redis客户端操作 ...

  4. java使用DES加密方式,实现对数据的加密解密

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用DES加密方式,实现对数据的加密解密.加密和解密中需要使用同一个秘钥 第一种方式,使用类型Key作为加密解密的共同秘钥. 测试代码 p ...

  5. java ios des加密解密_IOS、java支持DES加密

    转载请注明博客地址:http://blog.csdn.net/mengxiangyue/article/details/40015727 近期在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当 ...

  6. java实现DES加解密算法

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

  7. php与java的des加密解密

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

  8. Java实现DES加密解密

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

  9. java加密 des

    DES-Data Encryption Standard,即数据加密算法.是IBM公司于1975年研究成功并公开发表的.DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共6 ...

  10. Java加密与解密笔记(三) 非对称加密

    非对称的特点是加密和解密时使用的是不同的钥匙.密钥分为公钥和私钥,用公钥加密的数据只能用私钥进行解密,反之亦然. 另外,密钥还可以用于数字签名.数字签名跟上文说的消息摘要是一个道理,通过一定方法对数据 ...

最新文章

  1. matlab 工具箱application compiler的作用_matlab机器人工具箱下载与使用
  2. 51单片机中的定时器
  3. HDU 1495 非常可乐
  4. 2-7 SpringBoot常用注解讲解
  5. mysql_load
  6. confluence创建页面加载缓慢_树莓派4B使用docker安装confluence
  7. Pandas 文本数据方法 get_dummies()
  8. 搭建LAMP架构之Apache2.4.4安装及管理
  9. Ext.Net动态创建按钮-动态添加事件
  10. 超越阿里云,华为云网络服务竟然这么厉害!
  11. DSDT/SSDT综合教程
  12. QT打造图片直播服务器
  13. 几种平均数的物理意义应用场景
  14. 【支付】商业银行作为收单机构的银行卡支付流程
  15. css:text-decoration给文字增加上划线、删除线、下划线
  16. java学习---Nginx 反向服务代理
  17. 学习用HTML做新闻摘要
  18. uniapp Apple iOS 绑定解绑
  19. linux 流量控制 1
  20. raid卡缓存对硬盘性能_1000倍可靠性,专为高端NAS而生 西部数据SA500 RED SSD固态硬盘首发评测...

热门文章

  1. 计算机管理器磁盘清理,win10 磁盘空间清理管理器已停止工作怎么解决
  2. Android Jetpack组件(九)DataStore
  3. 服务器系统在虚拟机安装win7系统安装教程,vmware虚拟机如何安装win7系统_vmware虚拟机安装win7纯净版图文教程...
  4. [UE4]Expandable Area可展开的区域
  5. matlab求解多元函数的偏导数diff
  6. PDF文档编辑Acrobat Pro DC
  7. map转字符串数组中 php_php array_map()数组函数使用说明_PHP - ucfirst
  8. 安装Hadoop2.10.1
  9. python数字转拼音输出,[python] pinyin 模块 -- 将汉字文本转化为拼音
  10. 笔记本玩游戏掉帧怎么办。