• 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. $Poj1220/AcWing124\ Number\ Base\ Convertion$ 进制转换+高精除

    $Poj$   $AcWing$ $Description$ $Sol$ 进制转化+高精度除法 $over$ $Code$ #include<bits/stdc++.h> #define ...

  2. C++简单项目--贪吃蛇

    在800*600的地图上,蛇的初始长度为3节,用数组记录每一节的位置(每个正方形左上角的坐标),每一节为长度为10的正方形,初始方向向右.随机生成30个障碍物的的位置,随机生成食物的位置.吃到食物之后 ...

  3. Python for Data Analysis 学习心得(一) - numpy介绍

    一.简介 Python for Data Analysis这本书的特点是将numpy和pandas这两个工具介绍的很详细,这两个工具是使用Python做数据分析非常重要的一环,numpy主要是做矩阵的 ...

  4. iFit—Smart Cardio Equipment 简介与下载

    iFit—Smart Cardio Equipment 无法在谷歌商店中下载,经过技术提取app只可以直接通过下载app安装简单方便 实测机型:华为荣耀畅玩2平板, 小米6X,360N5S均测试无BU ...

  5. 日志查看工具 logviewer pro的使用

    1.logViewer Pro 介绍 logViewer Pro 是一款log文件查看器,它可以在短短数秒内打开上G的LOG文件,支持高亮某行文字(例如警告,错误),支持Unicode名字,支持查看的 ...

  6. 通过httpClient设置代理Ip

    背景: 我们有个车管系统,需要定期的去查询车辆的违章,之前一直是调第三方接口去查,后面发现数据不准确(和深圳交警查的对不上),问题比较多.于是想干脆直接从深圳交警上查,那不就不会出问题了吗,但是问题又 ...

  7. Faceted project metadata file "/.settings/org.eclipse.wst.common.project.facet.core.xml" could not be read

    转载自 https://blog.csdn.net/qing_gee/article/details/79397052 Eclipse启动后项目报了下图这个错误,说是org.eclipse.wst.c ...

  8. mongodb学习(三)——函数使用的小技巧

    $group 下 $sum 函数 Returns a sum of numerical values. Ignores non-numeric values 只能对数字求和,非数字没有作用 查询一段时 ...

  9. Educational Codeforces Round 80 D E

    A了三题,rk1000左右应该可以上分啦,开

  10. 小程序中组件公用属性和data-的使用

    属性名                类型                   描述                              注解 hidden                Boo ...