提示:
本文章基于上一篇基础理论知识介绍 链接: 现代密码学之描述概要(一)

DES加密

示例代码 des加密算法

Cipher :文档 https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html#getInstance-java.lang.String-

package com.atguigu.desaes;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;public class DesAesDemo {public static void main(String[] args) throws Exception{// 原文String input = "硅谷";// des加密必须是8位String key = "12345678";// 算法String algorithm = "DES";String transformation = "DES";// Cipher:密码,获取加密对象// transformation:参数表示使用什么类型加密Cipher cipher = Cipher.getInstance(transformation);// 指定秘钥规则// 第一个参数表示:密钥,key的字节数组// 第二个参数表示:算法SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);// 对加密进行初始化// 第一个参数:表示模式,有加密模式和解密模式// 第二个参数:表示秘钥规则cipher.init(Cipher.ENCRYPT_MODE,sks);// 进行加密byte[] bytes = cipher.doFinal(input.getBytes());// 打印字节,因为ascii码有负数,解析不出来,所以乱码
//        for (byte b : bytes) {//            System.out.println(b);
//        }// 打印密文System.out.println(new String(bytes));}
}

运行:

修改 密钥 key = “12345678” ,再次运行 ,出现乱码是因为对应的字节出现负数,但负数,没有出现在 ascii 码表里面,所以出现乱码,需要配合base64进行转码

使用 base64 进行编码

base64 导包的时候,需要注意 ,别导错了,需要导入 apache 包


运行程序

DES解密:

package com.atguigu.desaes;import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;public class DesDemo {// DES加密算法,key的大小必须是8个字节public static void main(String[] args) throws Exception {String input ="硅谷";// DES加密算法,key的大小必须是8个字节String key = "12345678";String transformation = "DES"; // 9PQXVUIhaaQ=// 指定获取密钥的算法String algorithm = "DES";String encryptDES = encryptDES(input, key, transformation, algorithm);System.out.println("加密:" + encryptDES);String s = decryptDES(encryptDES, key, transformation, algorithm);System.out.println("解密:" + s);}/*** 使用DES加密数据** @param input          : 原文* @param key            : 密钥(DES,密钥的长度必须是8个字节)* @param transformation : 获取Cipher对象的算法* @param algorithm      : 获取密钥的算法* @return : 密文* @throws Exception*/private static String encryptDES(String input, String key, String transformation, String algorithm) throws Exception {// 获取加密对象Cipher cipher = Cipher.getInstance(transformation);// 创建加密规则// 第一个参数key的字节// 第二个参数表示加密算法SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);// ENCRYPT_MODE:加密模式// DECRYPT_MODE: 解密模式// 初始化加密模式和算法cipher.init(Cipher.ENCRYPT_MODE,sks);// 加密byte[] bytes = cipher.doFinal(input.getBytes());// 输出加密后的数据String encode = Base64.encodeBase64String(bytes);return encode;}/*** 使用DES解密** @param input          : 密文* @param key            : 密钥* @param transformation : 获取Cipher对象的算法* @param algorithm      : 获取密钥的算法* @throws Exception* @return: 原文*/private static String decryptDES(String input, String key, String transformation, String algorithm) throws Exception {// 1,获取Cipher对象Cipher cipher = Cipher.getInstance(transformation);// 指定密钥规则SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);cipher.init(Cipher.DECRYPT_MODE, sks);// 3. 解密,上面使用的base64编码,下面直接用密文byte[] bytes = cipher.doFinal(Base64.decodeBase64(input));//  因为是明文,所以直接返回return new String(bytes);}
}

运行程序:

AES加密解密

AES 加密解密和 DES 加密解密代码一样,只需要修改加密算法就行,拷贝 ESC 代码

package com.atguigu.desaes;
import com.sun.org.apache.xml.internal.security.utils.Base64;import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;public class AesDemo {// DES加密算法,key的大小必须是8个字节public static void main(String[] args) throws Exception {String input ="硅谷";// AES加密算法,比较高级,所以key的大小必须是16个字节String key = "1234567812345678";String transformation = "AES"; // 9PQXVUIhaaQ=// 指定获取密钥的算法String algorithm = "AES";// 先测试加密,然后在测试解密String encryptDES = encryptDES(input, key, transformation, algorithm);System.out.println("加密:" + encryptDES);String s = dncryptDES(encryptDES, key, transformation, algorithm);System.out.println("解密:" + s);}/*** 使用DES加密数据** @param input          : 原文* @param key            : 密钥(DES,密钥的长度必须是8个字节)* @param transformation : 获取Cipher对象的算法* @param algorithm      : 获取密钥的算法* @return : 密文* @throws Exception*/private static String encryptDES(String input, String key, String transformation, String algorithm) throws Exception {// 获取加密对象Cipher cipher = Cipher.getInstance(transformation);// 创建加密规则// 第一个参数key的字节// 第二个参数表示加密算法SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);// ENCRYPT_MODE:加密模式// DECRYPT_MODE: 解密模式// 初始化加密模式和算法cipher.init(Cipher.ENCRYPT_MODE,sks);// 加密byte[] bytes = cipher.doFinal(input.getBytes());// 输出加密后的数据String encode = Base64.encode(bytes);return encode;}/*** 使用DES解密** @param input          : 密文* @param key            : 密钥* @param transformation : 获取Cipher对象的算法* @param algorithm      : 获取密钥的算法* @throws Exception* @return: 原文*/private static String dncryptDES(String input, String key, String transformation, String algorithm) throws Exception {// 1,获取Cipher对象Cipher cipher = Cipher.getInstance(transformation);// 指定密钥规则SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);cipher.init(Cipher.DECRYPT_MODE, sks);// 3. 解密byte[] bytes = cipher.doFinal(Base64.decode(input));return new String(bytes);}
}

运行程序:AES 加密的密钥key , 需要传入16个字节


运行程序

现代密码学之对称加密-DES及AES算法相关推荐

  1. Java加密算法—对称加密(DES、AES)

    目录 1.概述 2.加密模式 2.1 ECB 2.2 CBC 3.填充模式 4.对称加密.解密实现 1.概述 对称加密就是采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,也称为单密 ...

  2. java对称加密(DES/DESESE/AES)的简单使用

    主类: /*** Created by cuboo on 2016/10/14.*/ public class Main {public static void main(String agrs[]) ...

  3. Java实现密码学工具,集成了对称加密算法DES,AES,IDEA,公开加密算法RSA,ECC,散列算法MD5,SHA1,CRC32,以及RSA,DSA,ECDSA数字签名验证示例。

    密码学综合工具 前言 git网址 项目结构 项目预览 String与byte[]互转 通过`String`类转换 通过`Base64`互转[jdk-8] 前言 我们网络信息安全的实验...要我们找各种 ...

  4. 【加密】对称加密DES和非对称加密AES、数字签名|非对称加密--公钥和私钥的区别

    目录 对称加密DES和非对称加密AES.数字签名 对称加密 1.1 定义 1.2 优缺点 1.3 常用对称加密算法 非对称加密( Asymmetric Cryptography ) 非对称加密(现代加 ...

  5. 对称加密DES、3DES、AES的计算过程

    目录 一.流密码与分组密码 二.DES计算过程 密钥操作 明文操作 1)明文编排 2)16轮迭代 三.3DES 四.AES(也叫RIJNDAEL算法) State 密钥编排 循环4​​​​​​​轮  ...

  6. 密码学基础(对称加密和非对称加密)

    密码学基础 分类 对称加密 非对称加密 两类加密的特点 结合使用 举例 凯撒密码 代码实现-加密 代码实现-解密 main函数及文件加密 分类 一般分为: 对称加密 非对称加密 对称加密 加密和解密使 ...

  7. 对称加密DES和TripleDES

    原文地址: http://www.cnblogs.com/chnking/archive/2007/08/14/855600.html 一.  对称加密 对称加密,是一种比较传统的加密方式,其加密运算 ...

  8. [转载]对称加密DES和TripleDES

    一. 对称加密  对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码).因此,通信双方都必 ...

  9. aes key长度_AES加密(1): 基本AES算法

    简介 AES原本指的是一套标准FIPS 197,而AES算法一般指分组大小为128bits的Rijndeal算法,由比利时学者Joan Daemen和Vincent Rijmen提出. AES与Rij ...

  10. java aes 模式_Java实现多种加密模式的AES算法-总有一种你用的着!

    前言 对于AES算法,相信很多程序员小伙伴都听过.用过,其原理本文就不介绍了,而是讲讲在实际项目中的应用.前几天,项目需要跟乙方接口对接,乙方提供加密后的信息串,而我这边负责对加密串进行解密.其中加解 ...

最新文章

  1. 这个机器狗引起网友争议,「持枪机器狗」射程达1200米
  2. 万字总结,知识蒸馏如何在推荐系统中大显身手?
  3. java中的异常处理语句_Java中实现异常处理的基础知识
  4. mysql数据库group by_MySQL数据库对GROUP BY子句的功能扩展(1)
  5. java sbyte_JAVA与c#中byte取值范围的差异
  6. Mycat监控_监控平台安装zookeeper_作为配置中心注册发现用---MyCat分布式数据库集群架构工作笔记0036
  7. mvc ajax helpers,ASP.NET MVC 实践系列4-Ajax应用
  8. Python源码深度解析—对象的创建
  9. ajax基本概念,方法
  10. 文本分类-TextCNN
  11. 第5章分布式系统模式 Broker(代理程序)
  12. cf鼠标宏数据大全_钛度黑百合电竞定制鼠标,酷炫配置为电竞而生
  13. plsql手动修改数据
  14. tm影像辐射定标_「教程」遥感图像预处理之辐射定标
  15. 冰点还原界面无法呼出如何解决
  16. 计算机网络——透明网桥算法
  17. Windows热门的八款绘图软件总有一款是你想要
  18. 计算机理论和地理的关系,计算机辅助地理教学的理论和实践
  19. 《激光杂志》投稿经验
  20. 数据库设计---PowerDesigner(物理模型和概念模型)

热门文章

  1. 数据库10大常见安全问题盘点
  2. 【一步一步教会您升级到win7旗舰版】
  3. 微信小程序高德地图获取当前定位
  4. 利用Python实现腾讯校园招聘状态查询
  5. 大数据Hadoop之——Cloudera Hadoop(CM 6.3.1+CDH 6.3.2环境部署)
  6. python填空题_《Python程序设计》题库 - 填空题
  7. linux下调试paddlelite源码,Lite v2.7 v2.8 端侧部署 Ubuntu编译失败
  8. win10截图截屏快捷键 截图截屏工具
  9. python 集合字典_frozenset defaultdict MD5在线加密解密工具
  10. Dragonfly 三维可视化数据分析处理软件-切片分析工具使用教程