• 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. 【小技巧】在PS中测量图层间的边距

    今天学到了一个小技巧,前端切页面时会很方便,就是测量间距margin的. 在ps中,选中某个图层,然后按住ctrl键,再移动鼠标,就可以出现这个图层距其他元素的边距,这个太方便了.在此记录一下,免的以 ...

  2. .NetCoreApi容器与MySql容器互联

    构建Mysql容器 1.拉取mysql镜像 docker pull mysql/mysql-server 2.创建mysql镜像 docker run -d -p 3306:3306 -e MYSQL ...

  3. C语言之while循环

    while循环能做什么??? 先来个概念格式,while循环的一般形式为: while(表达式){ 语句块 } 意思是,先计算"表达式"的值,当值为真(非0)时, 执行" ...

  4. 记: Spring Data Jpa @OneToMany 级联查询被动触发的问题

    I have encountered a bug in using Spring Data Jpa. Specifically,when @OneToMany was used to maintain ...

  5. 能快速理解Java_集合类_的文章

    目录 @ 这篇文章是我学习完Java集合类做的笔记和总结,如果你想认真细读这篇文章,请做好受虐的准备(建议电脑看),因为这篇文章有点长,ヽ(ー_ー)ノ. 如果在看我这篇文章过程中,发现了错误,望指点. ...

  6. Java操作Jxl实现数据交互。三部曲——《第一篇》

    Java操作Jxl实现.xsl及.xsls两种数据表格进行批量导入数据到SQL server数据库. 本文实现背景Web项目:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js ...

  7. mac-air上安装 rabbitmq 并简单使用

    简介: brew 安装 rabbitmq,docker安装rabbitmq 安装官方php-amqp 扩展 简单使用样例(发送10次helloworld

  8. 晨叔技术晨报: 你真的搞懂JS中的“值传递”和“引用传递”吗?

    晨叔周刊,每周一话题,技术天天涨. 本周的话题是JS的内存问题(加入本周话题,请点击传送门). 图 话题入口 今天的技术晨报来,就来谈谈JS中变量的,值传递和引用传递的问题.现在,对于很多的JSer来 ...

  9. 从头学pytorch(十九):批量归一化batch normalization

    批量归一化 论文地址:https://arxiv.org/abs/1502.03167 批量归一化基本上是现在模型的标配了. 说实在的,到今天我也没搞明白batch normalize能够使得模型训练 ...

  10. go slice与函数传值的理解

    go语言中所有的传值方式都是传值操作. 今天遇到了以下代码: func main(){ slice := make([],) fmt.Println(slice) change(s) fmt.Prin ...