• 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. Synchronized解析——如果你愿意一层一层剥开我的心

    前言 synchronized,是解决并发情况下数据同步访问问题的一把利刃.那么synchronized的底层原理是什么呢?下面我们来一层一层剥开它的心,就像剥洋葱一样,看个究竟. Synchroni ...

  2. 洛谷P1427 小鱼的数字游戏 题解 递归入门题

    题目链接:https://www.luogu.com.cn/problem/P1427 题目大意: 给你一串数(输入到0为止),倒序输出这些数. 解题思路: 首先这道题目可以用数组存数据,然后输出. ...

  3. 「洛谷P3469」[POI2008]BLO-Blockade 解题报告

    P3469[POI2008]LO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个 ...

  4. 1046 划拳 (15 分)C语言

    划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...

  5. python I/O编程

    1.文件读写 使用open打开文件,f=open('/user/test.txt','r'),r表示可读 如果文件不存在,则抛出IOError 文件打开,则用read()方法进行读取 最后关闭用clo ...

  6. react super中的props

    有的小伙伴每次写组件都会习惯性在constructor和super中写上props,那么这个是必要的吗?? 首先要明确很重要的一点就是: 可以不写constructor,一旦写了constructor ...

  7. mongo repository

    using MongoDB.Driver; namespace Dben.Invoice.Repository { /// <summary> /// 仓储基类 /// </summ ...

  8. ES 服务器 索引、类型仓库基类 BaseESStorage

    /******************************************************* * * 作者:朱皖苏 * 创建日期:20180508 * 说明:此文件只包含一个类,具 ...

  9. Java 集合源代码——ArrayList

    (1)可以查看大佬们的 详细源码解析 : 连接地址为 : https://blog.csdn.net/zhumingyuan111/article/details/78884746 (2) Array ...

  10. django count(*) 慢查询优化

    分页显示是web开发常见需求,随着表数据增加,200万以上时,翻页越到后面越慢,这个时候慢查询成为一个痛点,关于count(*)慢的原因,简单说会进行全表扫描,再排序,导致查询变慢.这里介绍postg ...