• ECB
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException; public class Decrypt { public static byte[] initSecretKey() throws NoSuchAlgorithmException {
//指定算法秘钥生成器
KeyGenerator kg = KeyGenerator.getInstance("des");
//初始化秘钥生成器,使其具有确定到秘钥大小
kg.init(56);
//生成秘钥
SecretKey secretkey = kg.generateKey();
return secretkey.getEncoded();
} public static byte[] encrypt(byte[] key, String src) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
//jdk初始化秘钥转化des秘钥
DESKeySpec desKeySpec = new DESKeySpec(key);
//创建秘钥工厂实例
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("des");
//生成秘钥
SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec); /**
* 加密实际操作Cipher
*/
//创建Cipher对象
Cipher cipher = Cipher.getInstance("des/cbc/PKCS5Padding");
//初始化Cipher
cipher.init(Cipher.ENCRYPT_MODE,secretKey);
byte[] data = src.getBytes();
//加密
byte[] encryptedData = cipher.doFinal(data);
return encryptedData; } public static void main(String[] args) throws NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException, BadPaddingException, InvalidKeySpecException, InvalidKeyException, IOException, InvalidAlgorithmParameterException {
//byte[] secretKey = initSecretKey();
//或者代码中约定key
String key = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4";
byte[] secretKey = key.getBytes();
String str = "abc";
byte[] encryptedData = encrypt(secretKey, str);
String decrypteData = decrypt(secretKey, encryptedData);
} public static String decrypt(byte[] key,byte[] encryptedData) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
//jdk初始化秘钥转化des秘钥
DESKeySpec desKeySpec = new DESKeySpec(key);
//创建秘钥工厂实例
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("des");
//生成秘钥
SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);
/** * 解密实际操作Cipher */
//创建Cipher对象
Cipher cipher = Cipher.getInstance("des/cbc/PKCS5Padding");
//初始化Cipher
cipher.init(Cipher.DECRYPT_MODE,secretKey);
//加密
byte[] dencryptedData = cipher.doFinal(encryptedData);
return new String(dencryptedData);
}
}   
  • CBC

与ECB差别,加解密都要使用初始化向量,且初始化向量一致   

import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException; public class encrypt { public static byte[] initSecretKey() throws NoSuchAlgorithmException {
//指定算法秘钥生成器
KeyGenerator kg = KeyGenerator.getInstance("des");
//初始化秘钥生成器,使其具有确定到秘钥大小
kg.init(56);
//生成秘钥
SecretKey secretkey = kg.generateKey();
return secretkey.getEncoded();
} public static byte[] encrypt(byte[] key, String src,byte[] keyIv) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
//jdk初始化秘钥转化des秘钥
DESKeySpec desKeySpec = new DESKeySpec(key);
//创建秘钥工厂实例
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("des");
//生成秘钥
SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec); /**
* 加密实际操作Cipher
*/
//创建Cipher对象
Cipher cipher = Cipher.getInstance("des/cbc/PKCS5Padding");
//创建初始化向量
IvParameterSpec iv = new IvParameterSpec(keyIv);
//初始化Cipher
cipher.init(Cipher.ENCRYPT_MODE,secretKey,iv);
byte[] data = src.getBytes();
//加密
byte[] encryptedData = cipher.doFinal(data);
return encryptedData; } public static void main(String[] args) throws NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException, BadPaddingException, InvalidKeySpecException, InvalidKeyException, IOException, InvalidAlgorithmParameterException {
//byte[] secretKey = initSecretKey();
//或者代码中约定key
String key = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4";
byte[] secretKey = key.getBytes();
byte[] iv = {1, 2, 3, 4, 5, 6, 7, 8};
String str = "abc";
byte[] encryptedData = encrypt(secretKey, str,iv);
String decrypteData = decrypt(secretKey, encryptedData,iv);
} public static String decrypt(byte[] key,byte[] encryptedData,byte[] keyIv) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
//jdk初始化秘钥转化des秘钥
DESKeySpec desKeySpec = new DESKeySpec(key);
//创建秘钥工厂实例
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("des");
//生成秘钥
SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);
/** * 解密实际操作Cipher */
//创建Cipher对象
Cipher cipher = Cipher.getInstance("des/cbc/PKCS5Padding");
//创建初始化向量
IvParameterSpec iv = new IvParameterSpec(keyIv);
//初始化Cipher
cipher.init(Cipher.DECRYPT_MODE,secretKey,iv);
//加密
byte[] dencryptedData = cipher.doFinal(encryptedData);
return new String(dencryptedData);
}
}

  

DES与3DES同样到工作模式和填充模式相同,它们加解密区别:

  • jdk初始化秘钥转化des秘钥

  DES:

DESKeySpec desKeySpec = new DESKeySpec(key);

  3DES:

DESedeKeySpec spec = new DESedeKeySpec(key);
  • 创建秘钥工厂实例  

  DES:

SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("des");

  3DES:

SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
  • 密钥长度

  DES:56

  3DES:168

java加解密算法--DES的更多相关文章

  1. Java 加解密 AES DES TripleDes

    package xxx.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.crypt ...

  2. java加解密算法

    什么是加密算法?百度百科给出的解释如下: 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容, ...

  3. JAVA加解密之DES

    DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法.DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法.这样,只有掌握了和发送方相同密钥的人才 ...

  4. Java 加解密算法

    目前加密算法中分两种 一种是对称加密,一种是非对称加密 那么什么是对称加密呢?对称加密可以理解为加密和解密用的是一个钥匙. 而非对称加密,加锁用的是一个钥匙,而解锁用的是另外一个钥匙. 目前市面上用的 ...

  5. java加解密算法--对称加密工作模式

    对称加密又分为分组加密和序列密码.分组密码,也叫块加密(block cyphers),一次加密明文中的一个块.是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运 ...

  6. JAVA加解密 -- 数字签名算法

    数字签名 – 带有密钥的消息摘要算法 作用:验证数据完整性.认证数据来源.抗否认(OSI参考模型) 私钥签名,公钥验证 RSA 包含非对称算法和数字签名算法 实现代码: //1.初始化密钥 KeyPa ...

  7. 5.Java 加解密技术系列之 DES

    Java 加解密技术系列之 DES 序 背景 概念 基本原理 主要流程 分组模式 代码实现 结束语 序 前 几篇文章讲的都是单向加密算法,其中涉及到了 BASE64.MD5.SHA.HMAC 等几个比 ...

  8. Java 加解密技术系列之 DES

    序 前几篇文章讲的都是单向加密算法.当中涉及到了 BASE64.MD5.SHA.HMAC 等几个比較常见的加解密算法. 这篇文章,以及后面几篇.打算介绍几个对称加密算法.比方:DES.3DES(Tri ...

  9. DES加解密算法Qt实现

      算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为b ...

随机推荐

  1. OpenVINO 入门

    关于OpenVINO 入门,今天给大家分享一个好东西和好消息! 现如今,说人工智能(AI)正在重塑我们的各行各业绝不虚假,深度学习神经网络的研究可谓如火如荼, 但这一流程却相当复杂,但对于初学者来说也 ...

  2. asp.net core 3.x 通用主机原理及使用

    一.前言 只是讲asp.net core 3.x通用主机的大致原理,这些东西是通过查看源码以及自己根据经验总结得来的,在文章中不会深入源码,因为个人觉得懂原理就晓得扩展点,后期碰到有需求的时候再仔细去 ...

  3. IDEA错误: 找不到或无法加载主类

    错误: 找不到或无法加载主类 idea本身缓存问题 解决:清理缓存重启IDEA file-->invalidate Cache/restart 之后再重新build.

  4. Logger日志打印规范

    首先来看一下比较常用的Logger日志级别(部分未列出): error - 运行期错误日志记录,应该有专门的error日志文件.: warn - 警告信息,如程序调用了一个即将作废的接口,接口的不当使 ...

  5. Redis入门--1.安装Redis

    redis是什么? 是完全开源免费的,用c语言编写的,是一个单线程,高性能的(key/value)内存数据库,基于内存运行并支持持久化的nosql数据库 redis能干嘛? 主要是用来做缓存,但不仅仅 ...

  6. 【转】【e周美文】优秀博客上榜推荐

    Everybody,本周的博客推荐开始啦,记住,有好的博客可要给小活推荐一下哦. 7.19日 博客推荐 Android权限列表作者:@大漠落日 链接:http://my.eoe.cn/1103623/ ...

  7. IPython的介绍与使用

    1.IPython简介 ipython是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,支持bash shell命令,内置了许多很有用的功能和 ...

  8. C#实现DataTable转为Excel文件

    实现DataTable转为Excel文件,和上次分享的Excel文件转为DataTable互为反操作.DataTable转化为Excel文件是通过传入一个DataTable类型的参数,然后将传入的Da ...

  9. git与github的简单使用教程

    git与github的简单使用教程 一.创建仓库 点击new,进入创建仓库页面 对将要创建的仓库进行一些简单的设置 最后再点击create repository就可以了. 到这我们就创建好了一个仓库. ...

  10. mysql的查询优化

    参考网站:http://www.liyblog.top/p/6 这里总结了52条对sql的查询优化,下面详细来看看,希望能帮助到你     1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 wh ...