Java实现对称加密(DES,AES)快速入门示例

对称加密是使用相同的密码进行加密和解密, 对称加密实现简单,安全性相比非对称加密较弱, 常用的对称加密算法有 DES,AES以及PDE等,关于对称加密相关概念参考:
对称加密、非对称加密深度解析

本篇介绍Java的DES和AES的加密和解密, 关于PDE算法的加解密实现, 可以参考:
Java使用PBE算法进行对称加解密最简入门和示例

DES 加密和解密

在Java语言中, DES 算法使用一个密钥进行加密和解密,使用密码规范(DESKeySpec)和密钥工厂(SecretKeyFactory)生成密钥。通过Cipher类来进行加密和解密操作,使用“DES/ECB/PKCS5Padding”作为加密算法和填充模式。

DES加密示例代码:

	/*** DES 对称加密*/@Testpublic void desEncrypt() throws Exception {String plainText = "需要加密的内容";String secretKey = "this is password";DESKeySpec desKeySpec = new DESKeySpec(secretKey.getBytes(StandardCharsets.UTF_8));SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");SecretKey key = keyFactory.generateSecret(desKeySpec);Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, key);byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);System.out.println("DES加密后的内容=" + encryptedText);}

DES 解密示例代码:

	@Testpublic void desDecrypt() throws Exception {String encryptedText = "HAyFHQXRKmihGtxFsrZlAJwla4FE3aqS";String secretKey = "this is password";DESKeySpec desKeySpec = new DESKeySpec(secretKey.getBytes(StandardCharsets.UTF_8));SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");SecretKey key = keyFactory.generateSecret(desKeySpec);Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, key);byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));String plainText = new String(decryptedBytes, StandardCharsets.UTF_8);System.out.println("DES解密的内容=" + plainText);}

这里为什么是DES/ECB/PKCS5Padding , 而不直接是 DES呢?

DES/ECB/PKCS5Padding 是一种加密算法和模式的规范,常用于对数据进行加密和解密操作。

具体来说:

  • DES(Data Encryption Standard)是一种对称加密算法,它使用相同的密钥(通常是 56 位长)进行加密和解密操作。
  • ECB(Electronic Codebook)是一种加密模式,它将输入的数据分成块,每块独立进行加密运算。
  • PKCS5Padding 是一种填充模式,它在数据块长度不足时,使用特定的填充方式进行填充,使每个数据块的长度达到指定长度。

DES/ECB/PKCS5Padding 相比其他加密算法和模式,具有以下优点和缺点:

优点:

  • 运算速度相对较快,适合对大数据流进行加密和解密操作;

  • 实现比较简单,可在多种编程语言和平台上进行实现;

  • 加密后的数据大小不会增加。

缺点:

  • ECB 模式不具备随机性和反复率,相邻数据块可能会产生相同的密文,容易受到攻击;

  • 密钥长度较短,安全性相对较低,易受到暴力破解和密码分析攻击;

使用相同密钥加密同一数据,密文总是相同,可容易地进行重放攻击和密码攻击。

因此,对于加密性能要求较高,安全要求相对较低的场景,可以选择使用 DES/ECB/PKCS5Padding 进行加密和解密操作。对于安全性要求较高的场景,应该考虑使用更加安全和可靠的加密算法和模式,比如 AES、RSA、CBC、GCM 等。

AES 加密和解密

AES 的加解密和DES很类似,直接看代码:

AES加密代码示例:

	@Testpublic void encryptAES() throws Exception {String plainText = "需要加密的内容";String secretKey = "this is password";SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "AES");Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));String encryptedText =  Base64.getEncoder().encodeToString(encryptedBytes);System.out.println("AES加密后的内容=" + encryptedText);}

AES解密代码示例:

	@Testpublic void decryptAES() throws Exception {String encryptedText = "oL2b5xULTtAmfi4ujnpw/jPamo0nTNCgRC9Bo+SBz7k=";String secretKey = "this is password";SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "AES");Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));String plainText = new String(decryptedBytes, StandardCharsets.UTF_8);System.out.println("AES解密的内容=" + plainText);}

AES(Advanced Encryption Standard)使用相同的密钥进行加密和解密操作。这个示例中使用密钥字符串构建了一个 AES 密钥规范(SecretKeySpec),并通过 Cipher 类来进行加密和解密操作,使用 “AES/ECB/PKCS5Padding” 作为加密算法和填充模式。

需要注意的是,AES 是一个块密码算法,不同于 DES 等分块密码,它支持不同的密钥长度,如 AES-128、AES-192 和 AES-256。

在实际应用中,为了保证安全性,密钥应该足够长,同时需要确保密钥的安全生成、存储和传输。

Java 8 找不到 javax.crypto.spec.SecretKeySpec问题解决

在Java 11 和Java 17版本中,上面示例运行正常,但是在Java 8 中会提示找不到 javax.crypto.spec.SecretKeySpec,在及基于Eclipse 开发中, 虽然import 了SecretKeySpec , 但是会提示找不到这个类:

The import javax.crypto.spec.SecretKeySpec cannot be resolved

这里需要下载jce的扩展包,下载地址:
https://www.oracle.com/java/technologies/javase-jce8-downloads.html

下载后解压,
在这里插入图片描述

将 local_policy.jar 和US_export_policy.jar 放入JRE 的security目录中,比如C:\Program Files\Java\jdk1.8.0_361\jre\lib\security\policy\unlimited, 覆盖该目录下的同名文件:
在这里插入图片描述

之后在 Eclipse 的项目中导入这两个文件。

在线代码

  • https://github.com/osxm/java-ency/blob/master/src/main/java/com/osxm/je/topic/security/SymmetricEncy.java


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/87270.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python——案例17:判断某年是否是闰年

案例17:判断某年是否是闰年 判断依据:闰年就是能被400整除,或者能被4整除的年份numint(input(输入年份:))if num%1000: if num%4000: #整百年份的判断print("%s年是闰年"%num) #…

设计模式行为型——状态模式

目录 状态模式的定义 状态模式的实现 状态模式角色 状态模式类图 状态模式举例 状态模式代码实现 状态模式的特点 优点 缺点 使用场景 注意事项 实际应用 在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,把这种对…

flutter开发实战-实现marquee根据文本长度显示文本跑马灯效果

flutter开发实战-实现marquee文本跑马灯效果 最近开发过程中需要marquee文本跑马灯效果,这里使用到了flutter的插件marquee 效果图如下 一、marquee 1.1 引入marquee 在pubspec.yaml中引入marquee # 跑马灯效果marquee: ^2.2.31.2 marquee使用 marquee使用也是…

谈谈对Spring MVC的理解

问题分析: SpringMVC 是一种基于 Java 语言开发,实现了 Web MVC 设计模式,请求驱动类型 的轻量级 Web 框架。 SpringMVC采用了 MVC 架构模式的思想,通过把 Model,View,Controller 分离,将 Web 层…

易服客工作室:如何在WordPress网站中举办虚拟活动

您是否正在寻找举办和管理虚拟活动的最佳方式? 也许您想在线举行下一次会议或举办有关您的产品和服务的网络研讨会。您可能担心它太贵,或者您没有技术知识来实现​​它。 在本文中,我们将列出您所需的在线服务的所有设备,并教您…

实践指南-前端性能提升 270% | 京东云技术团队

一、背景 当我们疲于开发一个接一个的需求时,很容易忘记去关注网站的性能,到了某一个节点,猛地发现,随着越来越多代码的堆积,网站变得越来越慢。 本文就是从这样的一个背景出发,着手优化网站的前端性能&a…

在R中比较两个矩阵是否相等

目录 方法一:使用all.equal()比较两个R对象是否近似相等 方法二:使用identical比较两个R对象是否精确相等。 方法一:使用all.equal()比较两个R对象是否近似相等 使用函数:all.equal(x,y) 比较两个R对象x和y是否近似相等 > M1…

abbitmq启动访问不了http://localhost:15672 通过修改服务登录admin

abbitmq默认的对Administration授权,而我的用户不是默认的Administration,所以后来打开服务,找到rabbitmq服务,属性,登陆,将本地系统账户修改为此账户,修改完成之后再重启服务,这时候…

SpringMVC注解开发

1. 构建流程 1&#xff09;IDEA创建一个Maven项目。配置所需依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></depe…

【Fegin技术专题】「原生态」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(上)

前提介绍 Feign是SpringCloud中服务消费端的调用框架&#xff0c;通常与ribbon&#xff0c;hystrix等组合使用。由于遗留原因&#xff0c;某些项目中&#xff0c;整个系统并不是SpringCloud项目&#xff0c;甚至不是Spring项目&#xff0c;而使用者关注的重点仅仅是简化http调…

瑞数系列及顶像二次验证LOGS

瑞数商标局药监局专利局及顶像二次验证 日期&#xff1a;20230808 瑞数信息安全是一个专注于信息安全领域的公司&#xff0c;致力于为企业和个人提供全面的信息安全解决方案。他们的主要业务包括网络安全、数据安全、应用安全、云安全等方面的服务和产品。瑞数信息安全拥有一支…

机器学习笔记:李宏毅chatgpt 大模型 大资料

1 大模型 1.1 大模型的顿悟时刻 Emergent Abilities of Large Language Models&#xff0c;Transactions on Machine Learning Research 2022 模型的效果不是随着模型参数量变多而慢慢变好&#xff0c;而是在某一个瞬间&#xff0c;模型“顿悟”了 这边举的一个例子是&#…

YOLOv5、YOLOv8改进:MobileViT:轻量通用且适合移动端的视觉Transformer

MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer 论文&#xff1a;https://arxiv.org/abs/2110.02178 1简介 MobileviT是一个用于移动设备的轻量级通用可视化Transformer&#xff0c;据作者介绍&#xff0c;这是第一次基于轻量级CNN网络性…

STM32 LL库+STM32CubeMX--点亮板载LED

一、前期准备 硬件&#xff1a;STM32F103C8T6开发板调试工具&#xff1a;DAPLink(本次使用)或USB-TTL开发环境&#xff1a;STM32CubeMX、Keil、Vscode(可选)板载LED&#xff1a;PC13(低电平点亮) 二、STM32CubeMX配置 1.选择芯片型号&#xff1a; 2.配置外设时钟&#xff1a;…

【BASH】回顾与知识点梳理(十七)

【BASH】回顾与知识点梳理 十七 十七. 什么是 Shell scripts17.1 干嘛学习 shell scripts自动化管理的重要依据追踪与管理系统的重要工作简单入侵检测功能连续指令单一化简易的数据处理跨平台支持与学习历程较短 17.2 第一支 script 的撰写与执行撰写第一支 script 17.3 撰写 s…

Android应用开发(37)LTPO帧率测试基于Surfaceview(暂存)

Android应用开发学习笔记——目录索引 参考android官网&#xff1a; Frame rate | Android media | Android Developers多重刷新率 | Android 开源项目 | Android Open Source ProjectWindowManager.LayoutParams | Android Developers 目前市面上旗舰手机基本都是…

[保研/考研机试] KY56 数制转换 北京大学复试上机题 C++实现

题目链接&#xff1a; 数制转换https://www.nowcoder.com/share/jump/437195121691734210665 描述 求任意两个不同进制非负整数的转换&#xff08;2进制&#xff5e;16进制&#xff09;&#xff0c;所给整数在long所能表达的范围之内。 不同进制的表示符号为&#xff08;0&a…

腾讯云COS的快速接入

背景 最近在研究一个剪贴板粘贴工具&#xff0c;实现粘贴图片&#xff0c;返回可访问的地址&#xff0c;这个在我的哔哩哔哩上有出一期视频&#x1f92d;。但是&#xff0c;我发现部分博客平台不能正常的转载我的图片链接&#xff0c;于是研究了一下腾讯云的COS&#xff08;阿…

Oracle 知识篇+会话级全局临时表在不同连接模式中的表现

标签&#xff1a;会话级临时表、全局临时表、幻读释义&#xff1a;Oracle 全局临时表又叫GTT ★ 结论 ✔ 专用服务器模式&#xff1a;不同应用会话只能访问自己的数据 ✔ 共享服务器模式&#xff1a;不同应用会话只能访问自己的数据 ✔ 数据库驻留连接池模式&#xff1a;不同应…

“冰箭卫士·IP发布会”首次亮相第14届海峡两岸(厦门)文博会

2023年8月6日,“冰箭卫士IP发布会”首次亮相海峡两岸文博会思明馆。此次发布会由厦门市文化创意产业协会、厦门理工&#xff08;集美区&#xff09;政产学研基地主办&#xff0c;厦门市文化创意产业协会IP设计研究院、厦门一笔之上文化发展有限公司、冰箭应急安全科技研究院承办…