java 实现对称加密的方法

news2024/11/19 15:22:38

 

对称加密是一种加密算法,它和非对称加密的区别在于:加密和解密使用不同的密钥,对称加密使用同一个密钥对数据进行加密和解密。 今天我们来学习下对称加密的实现方法,不需要使用到私钥,只需要用到公钥。 首先我们来看下这个加密解密的过程: 我们先来看下输入参数,这里使用了公钥密码来进行对称加密: 输出结果为: 在此基础上,我们再来看下这个对称加密的算法: 通过上面的代码可以看出,要想进行解密需要先解密公钥,然后再用私钥进行解密。

  • 1、使用公钥来加密数据

    使用公钥加密的原理是,数据长度固定,使用密钥将数据加密。例如,如果要对1-8位的数字进行加密,则需要使用32位的密钥。首先生成32位的密钥,然后对其进行加密得到256位的数据。最后,将数据保存到一个字符串中,然后将该字符串发送到接收方。 使用公钥加密后,就相当于给数据加上了一个密码。如果想要对数据进行解密,就需要解密公钥并将其还原成原来的内容。 在上面的代码中,使用了4个字符: 在这里我们需要注意下参数 name中的a和b,在没有密钥的情况下是无法对其进行加密的。公钥的长度固定为32位,所以我们需要使用32位的密钥才能对数据进行加密。 使用公钥进行加密后,我们还需要对数据进行解密才能得到原来的内容。这里可以通过发送一段伪随机数来实现解密,伪随机数是由16位随机数和64位随机数组合而成:

  • 2、生成对称密钥

    我们知道,加密和解密是通过不同的密钥来完成的,对称密钥就是加密和解密的钥匙。生成对称密钥就是使用私钥,然后用公钥去加密数据。所以我们需要找到一个对称密钥生成算法,通过这个算法来生成对称密钥。我们在 Java中找到了一个生成对称密钥的算法: 这里我们使用了 RSA算法,使用 RSA算法来计算公钥密码。RSA算法是基于大数分解的一种计算方法,由美国国家科学基金会于1986年提出,并于1987年通过了美国国家标准与技术研究院(NIST)的评审。 RSA算法有两个参数,一个是私钥,另一个是公钥。从上面的代码中我们可以看出, RSA算法需要两个参数:公钥和私钥。也就是说,我们需要找到一个私钥和一个公钥。下面我们来看下具体的实现过程: 第一步:获取公钥:首先在官网上找到 RSA算法,然后点击“免费下载”。 第二步:下载并解压 RSA文件 第三步:使用 RSA算法生成私钥:然后我们使用一个`. java. lang`文件来生成一个`. java. lang`文件(注意这里使用的是 java)。 第四步:使用 java. lang把`. java. lang`文件里面的`write_key’`替换为`write_primes’。 第五步:获取公钥并加密:然后将此密钥对数据进行加密(这里需要注意一下,我们需要使用的是公钥,不是私钥) 第六步:使用私钥解密:最后将此密钥对数据进行解密。 上面的代码中使用了三个参数,其中第一个参数是私钥值,第二个参数是公钥值,最后一个参数是加密和解密的公钥。通过上面的代码可以看出,我们先使用了私钥对数据进行加密,然后再将加密后的数据和原来的数据进行对比。结果如下:

  • 3、解密数据

    这个时候,我们可以使用以下方法进行解密: 使用 path ()方法获取公钥,并使用 path ()方法获取私钥。 其中 path ()方法的参数为:公钥; 我们可以发现,这里的密钥长度是50,这就说明了要想进行加密,需要至少50个字符才能完成。 这里我们使用了字符串来作为输入参数,因为字符串是不可能进行加密的,所以它可以用来做解密操作。 在上面的代码中,我们采用了两个函数分别对数据进行解密。 第一个函数是用来对数据进行加密的,第二个函数是用来解密数据的。当然在实际工作中,我们只需要解密第一个函数即可。

  • 4、验证加密的结果

    当我们完成了密码的生成,加密,解密等操作之后,接下来我们就需要验证下加密的结果是否正确,可以通过以下几种方式来验证: (1)查看输入的参数是否和返回的参数相同,如果相同则说明是正确的,如果不相同则说明没有正确加密; (2)我们可以通过查看参数的返回类型来验证是否正确,比如: 我们可以使用 javac. append ()方法将返回类型转换为数字签名: (3)使用 java. util. toString ()方法将返回类型转换为字符串: 可以看出,上面几种验证方式都是需要将返回的类型进行转换的,但是不管是哪种方法都需要在编译期完成。这也是为什么我们不建议大家在程序运行时进行转换类型的原因。 那么上面我们说了这么多怎么去使用对称加密来实现呢?接下来我们来看下实现对称加密的核心原理: 通过上面这段代码,我们可以看出,这里使用了两个私钥(公钥)来对数据进行加密和解密。但是这里有个问题:为什么要使用两个私钥来进行加密呢?因为一个私钥只能处理一个数字签名,如果有多个数字签名,那么私钥就不能处理了。 这就需要使用两个公钥了,一个公钥是公开的,另一个公钥是保密的。通过上面这段代码我们就可以很好地理解对称加密的原理了。 以上就是今天所讲到的内容了,相信通过这段话大家已经对对称加密有了一定的了解。如果还有什么不明白或者不懂的地方请留言。

  • 5、总结

    在实际项目中,我们会使用到对称加密和非对称加密两种加密方式,如果不考虑速度的话,我们建议使用非对称加密。 如果是考虑速度的话,建议使用对称加密,因为它的算法简单、占用资源小、效率高。但是对称加密会存在一些问题: 1.当客户端不知道公钥的时候,无法对数据进行解密; 2.私钥的安全等级不如公钥高; 3.私钥不能存储在客户端; 4.当客户端被攻击时,可能会造成数据泄露。 因此,在实际应用中,建议使用非对称加密方式。

以下是常用的Java对称加密代码:

1. AES加密
```java
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESUtil {
private static final String KEY = "1234567890123456"; // 密钥
public static String encrypt(String content) throws Exception {
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedBytes = cipher.doFinal(content.getBytes("UTF-8"));
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String content) throws Exception {
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] encryptedBytes = Base64.getDecoder().decode(content);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
return new String(decryptedBytes, "UTF-8");
}
}
```
2. DES加密
```java
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class DESUtil {
private static final String KEY = "12345678"; // 密钥
public static String encrypt(String content) throws Exception {
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedBytes = cipher.doFinal(content.getBytes("UTF-8"));
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String content) throws Exception {
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] encryptedBytes = Base64.getDecoder().decode(content);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
return new String(decryptedBytes, "UTF-8");
}
}
```
3. Blowfish加密
```java
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class BlowfishUtil {
private static final String KEY = "1234567890123456"; // 密钥
public static String encrypt(String content) throws Exception {
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedBytes = cipher.doFinal(content.getBytes("UTF-8"));
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String content) throws Exception {
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] encryptedBytes = Base64.getDecoder().decode(content);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
return new String(decryptedBytes, "UTF-8");
}
}
```

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

气传导蓝牙耳机优缺点有哪些?气传导耳机科普及推荐

气传导蓝牙耳机,可以说是目前使用场景最全的种类,个人认为,这种耳机也同时是目前最好的耳机体验形态,将会是主流的长时间佩戴的耳机形态,甚至是未来智能耳机终极形态。 不过目前大多数人都还没有接触过这类蓝牙耳机&a…

污水处理厂的工艺流程有哪些?

对于普通人来说,一个完整的污水处理过程是相当神秘的,那么,今天我们来聊一下,一个完整的污水处理厂的工艺流程,都包括了哪方面的内容,一起来了解一下吧! 一、污水处理厂的工艺流程 1、先进行污…

项目管理中,管理者如何打造团队执行力?

作为一名优秀的团队管理者,首先应该以身作则,成为团队的榜样,并将自己的良好工作作风带入团队中,影响团队成员,以真诚的态度打动每一位成员,促进团队之间的默契合作。 团队执行力的最重要原因通常与团队的…

项目管理工具哪家使用更便捷?

项目管理作为企业管理中的一个重要分支,受到越来越多企业及商业人士的关注。事实上,项目管理是基于有限的技能、人力、物质资源和其他资源,完成一个项目的过程。项目管理软件和工具哪家好?Zoho Projects项目管理工具可以帮助企业提…

【应急响应】拒绝服务钓鱼指南DDOS压力测试邮件反制分析应用日志

文章目录 内网应急-日志分析-爆破&横向&数据库红队APT-钓鱼邮件-内容&发信人&附件拒绝攻击-DDOS&CC-代理&防火墙防御 内网应急-日志分析-爆破&横向&数据库 1、协议口令爆破事件(以SQLserver、RDP为例) 查看SQL server日志文件(可以看到密码爆…

女程序员晒出11月的工资条:工资是高,但是真累,说老十岁一点也不过分

现在网上又好多人晒工资。有服务员、工人、护士、教师还有“程序猿”。程序员在大多数人眼里都是“高智商”,高薪资,那程序员到底一月的工资能开多少呢? 前两天有位女程序员在网上晒出了11月的工资条,说: 工资是高(比起有些人算…

jenkins——参数化配置、插件安装以及Jenkins SSH 插件安装

文章目录 一、Jenkins 参数化配置参数化 Job 的配置 二、插件安装1、插件安装入口2、插件管理代理3、插件新装4、插件更新5、插件移除和禁用 三、Jenkins SSH 插件安装1、下载 SSHAgent 插件2、SSHAgent 相关使用 一、Jenkins 参数化配置 同一个项目需要在不同环境下测试 参数…

智能工厂技术架构、系统架构、数据架构、应用架构及场景应用方案

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 流程制造-智能工厂规划设计工作总体视图 流程制造-智能工厂总体业务框架 根据业务调研和分析,勾勒出流程制造-智能工厂的总体业务框架,涵盖计划经营…

Netty核心源码分析(一),Netty的Server端启动过程源码分析

文章目录 系列文章目录一、Netty的Server端启动过程源码分析1、NioEventLoopGroup的创建(1)构造方法 2、ServerBootstrap的创建(1)构造方法(2)group方法(3)channel方法(4…

机器学习——结构风险最小化(SRM)

问:基于结构风险最小化 (SRM)原则会倾向于选择更复杂的模型,因此其泛化能力一般较差。 答:错误,基于经验风险最小化(ERM)会倾向于选择更复杂的模型。基于结构风险最小化原则的模型选择会考虑模型的复杂度和…

水泥工厂 3D 可视化大屏,全工艺流程数字孪生,破局产线低效运转!

近年来,随着我国经济的发展和人民生活水平的提高,我国对于水泥行业的关注程度也越来越高,为了保证水泥行业的健康稳定发展,许多地方都在大力推动水泥生产技术创新工作。当前水泥行业的发展正处于新旧动能更迭的关键阶段&#xff0…

String类的学习笔记(上):介绍String类及其常用方法的使用

本文介绍了Java中用来描述操作字符串的String类,和其一些常用的基本操作方法,字符串的创建输出,字符串对象的比较,字符串查找,字符串的转化,字符串的替换,字符串拆分,字符串截取,和大小写转换,去除左右空格,子字符串包含,学会使用这些方法,能更方便的使用操作字符串~ String类的…

c++积累6-内联函数

1、说明 内联函数是c为提高程序运行速度所做的一项改进。 2、常规函数运行 编译的可执行程序:由一组机器语言指令组成。 程序执行: 1、操作系统将这些指令载入到内存,每条指令都有一个特定的内存地址 2、计算机逐步执行这些指令 3、如果有…

数据结构修炼第二篇:顺序表和链表

系列文章目录 第一章 时间复杂度和空间复杂度 第二章 顺序表,列表 第三章 栈和队列 第四章 二叉树 第五章 排序 作者:🎈乐言🎈 简介:🎈大一学生,目前在致力于c/c/python,高数的…

二十四节气-谷雨文案、海报分享,谷雨润万物,不觉夏已至。

谷雨,是二十四节气之第6个节气,春季的最后一个节气。 谷雨有三候: 一候萍始生,即谷雨后降雨量增多,春雨绵绵,浮萍开始生长; 二候鸣鸠拂其羽,布谷鸟便开始提醒人们播种了&#xff…

【SCI征稿】IEEE旗下1区人工智能类SCI, 稳定检索22年,仅3个月左右录用~

一、期刊简介: 1区人工智能类SCI&EI (高质量) 【期刊概况】IF:6.0-7.0, JCR1区, 中科院3区; 【终审周期】走期刊部系统,3个月左右录用; 【检索情况】SCI&EI双检,正刊; 【数据库收录年份】2001…

自编码器简单介绍—使用PyTorch库实现一个简单的自编码器,并使用MNIST数据集进行训练和测试

文章目录 自编码器简单介绍什么是自编码器?自动编码器和卷积神经网络的区别?如何构建一个自编码器?如何训练自编码器?如何使用自编码器进行图像压缩?总结使用PyTorch构建简单的自动编码器第一步:导入库和数…

中级软件设计师备考---数据库系统2

目录 规范化理论并发控制数据库完整性约束数据备份 规范化理论 函数依赖 部分函数依赖:在一个关系中,一个非主属性依赖于该关系的某个候选键的一部分属性。举个例子,假设有一个关系R(A,B,C,D),其中(A,B)是候选键。 如果C仅依赖于A…

微服务学习之面试知识相关总结(Nacos、MQ)

文章目录 壹 微服务Nacos1.1 SpringCloud常见组件1.2 Nacos的服务注册表结构1.3 Nacos如何支撑内部数十万服务注册压力1.4 Nacos避免并发读写冲突问1.5 Nacos与Eureka的区别1.6 Sentinel的限流与Gateway的限流的差别1.7 Sentinel的线程隔离与Hystix的线程隔离的差别 贰 MQ知识2…

前端Img图片不同格式的互相转化

目录 一、格式简介 二、格式互转 2.1、base64在视图上进行页面展示 2.3、将二进制流转为url进行页面展示 2.3、静态路径转二进制流传给后端 一、格式简介 主要有base64(数字字母组成的乱码那种)、url(http://xxx地址那种)、二进制流(后端上传图片的格式)、本地项目文件夹…