加密算法 AES和RSA

2023-10-29

一,加密

(一)加密基础?

通过互联网发送数据,数据可能会被第三者恶意窃听,造成损失。因此需要给重要的数据进行加密,加密后的数据被称为“密文”。接收方通过解除加密或得原本的数据,把密文恢复为原本数据的操作叫做“解密”。像这样就减少了数据被恶意窃听的风险。

那么加密是怎么操作的呢?

首先计算机会使用1和0这两个数据表示二进制来管理所有数据。虽然数据有多种格式,图片,音频,视频,文档等,但在计算机中都是用二进制来表示。

对计算机来说,数据就是一串有意义的数字。

密文就是通过某种运算使得计算机无法解释的无规律数字。

加密运算用到的“密钥”,就是对数据进行数值运算,把数据变成第三者无法理解的形式的过程。

比如数据a是一串数据,通过“密钥”进行换算变成b,这样对于不知道计算过程的C来说,数据b就无法表示原来数据a的意思。原本a的二进制表示的数字是1,传输过程中却变成了数据b表示数字2,这样由于“密钥”和运算吧原本数据改变,防止第三方简单获取的方式就是加密。

a:01

b:10

“密钥”和运算:1和0互换

01 +“密钥”和运算 = 10

当然实际生产中用到的算法和密钥肯定不是这么简单的。

(二)加密数据算法

加密数据的方法可以分两种,加解密使用相同的密钥的“共享秘钥加密”和分别使用不同密钥的“公开密钥加密”

1,共享秘钥加密 - 对称加密

是什么?

加密解密都使用相同密钥的一种加密方式,由于使用密钥相同,所以也被称作“对称加密"。

实现原理

  1. 对称加密算法采用单密钥加密,在通信过程中,数据发送方将原始数据分割成固定大小的块,经过密钥和加密算法逐个加密后,发送给接收方

  1. 接收方收到加密后的报文后,结合解密算法使用相同密钥解密组合后得出原始数据。

实现算法

实现共享密钥加密算法的有凯撒密码,AES,DES,动态口令,其中AES应用场景最为广泛。

优缺点

效率高,算法简单,系统消耗小,适合加密大量数据。

安全问题

由于使用了相同的秘钥进行加密和解密,一旦秘钥被第三方获取,所传输的信息将

不在安全。

因此需要把密钥安全的送出去,这就是“密钥分配问题”

2,公开密钥加密 - 非对称加密

是什么?

是指加密和解密分别使用不同的密钥的一种加密方法,也被成为“非对称加密”。加密用的密钥称为“公开密钥”,解密用的密钥称为:“私有密钥”。

实现原理

  1. 甲使用乙的公钥并结合相应的非对称算法将明文加密后发送给乙,并将密文发送给乙。

  1. 乙收到密文后,结合自己的私钥和非对称算法解密得到明文,得到最初的明文。

实现算法

实现公开加密算法有RAS算法,椭圆曲线加密算法等,最为广泛的是RSA算法。

优缺点

优:

1,安全性更高 :与共享密钥加密不同的是,公开密钥加密不会出现密钥分配问题。

缺:

1,复杂度高 :因为加密和解密用的是不同密钥,而且无法从一个密钥推导出另一个密钥,且公钥加密的信息只能用同一方的私钥进行解密。

2,解密加密比较耗时:非对称加密的缺点是算法非常复杂,导致加密大量数据所用的时间较长

3,公钥无法自证清白

“公开密钥”无法证明自己的身份,导致“公开密钥”可靠性出现问题。

例如:

正常情况下,A与B交互,A向B发送公钥,B通过A发来的公钥加密,A接收到密文后通过私钥解密。

异常情况:A与B交互,A向B发送公钥的过程中可以被C先截取A的公钥,然后C向B发出公钥,由于“公开密钥”无法自证清白,无法显示自己是由谁生成的,所以B不会发现接收到的“公开密钥”是谁C发送的。

在接下来的传输过程中,B通过C发送的“公开密钥”进行数据加密,会被C“私有密钥”解密后,然后通过A的“公开密钥”加密,在传输给A,A通过自己签发的“私有密钥”解密成功,也不会发现这中间出现了什么问题。

安全性的问题可以通过“数字证书”来解决,“数字证书”本身含有自身信息来表达身份,同时依赖认证中心的信任链条来保证安全性。

二,代码和实例

AES

密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。,目前已被广泛应用。

RSA

RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制 。

RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥 。

备注:

代码实例在以下路径,JS和java的实例,用于前后端密码传输过程中的加解密。

链接:https://pan.baidu.com/s/1wNzBErch3dIa5sxGRiIdMQ

提取码:lvu4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加密算法 AES和RSA 的相关文章

  • “JSONArray 文本必须在 null 的第 1 个字符处以 '[' 开头”

    只是想知道这个错误可能意味着什么 我从下面的代码中得到它 try JSONArray jArray new JSONArray result for int i 0 i
  • Java Swing BoxLayout 忽略 AlignmentX

    在下面的代码中 通过调用setAlignmentX with Component LEFT ALIGNMENT我希望在居中的滑块上获得左对齐的标签 由于某种原因 标签也居中 似乎与传递给 setAlignmentX 的值无关 我必须向 se
  • Android Toast 消息不起作用

    我正在通过 Andengine 为 Android 开发游戏 我有 MainActivity 类和 GameScene 类 我在 GameActivity 中使用 Toast 消息 它正在发挥作用 Toast makeText this H
  • 将处理项目移至 Eclipse

    我已经在处理项目上工作了一段时间 现在想将其移至 Eclipse 中 我已经在 Eclipse 环境中安装了 Proclipse 我有很多扩展名为 pde 的文件 然而 Proclipse 文件都以 java 结尾 所有 pde 文件都存在
  • 是否可以使用 Java 读写 Parquet,而不依赖 Hadoop 和 HDFS?

    我一直在寻找这个问题的解决方案 在我看来 如果不引入对 HDFS 和 Hadoop 的依赖 就无法在 Java 程序中嵌入读写 Parquet 格式 它是否正确 我想在 Hadoop 集群之外的客户端计算机上进行读写 我开始对 Apache
  • 绘制平滑曲线

    我想创建更平滑的曲线 而不仅仅是线角 这是我现在画的图 这是我的代码 case FREEHAND float pts float ptk ptk new float 2 imageMatrix invert inv if mCurrentS
  • 但是创建静态实用方法不应该被过度使用吗?如何避免呢? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 随着时间的推移 java项目中引入了许多实用方法来完成更复杂和简单的任务 当使用静态方法时 我们在代码中引入了紧密耦合 这使得我们的代
  • Java 中如何验证字符串的格式是否正确

    我目前正在用 Java 编写一个验证方法来检查字符串是否是要更改为日期的几种不同格式之一 我希望它接受的格式如下 MM DD YY M DD YY MM D YY 和 M D YY 我正在测试第一种格式 每次它都告诉我它无效 即使我输入了有
  • 如何在 Eclipse 中获得完全限定的类名?

    有没有一种快速方法可以在 Eclipse 中单击 Java 类并获取其完全限定名称 或将其复制到剪贴板 2016年6月29日编辑 正如 Jeff 所指出的 您只需要执行以下第二步 1 Double click on the class na
  • 在Java中如何将字节数组转换为十六进制?

    我有一个字节数组 我希望该数组的每个字节字符串转换为其相应的十六进制值 Java中有没有将字节数组转换为十六进制的函数 byte bytes 1 0 1 2 3 StringBuilder sb new StringBuilder for
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • ActiveMQ JNDI 查找问题

    尝试使用 JNDI 运行以下 ActiveMQ http activemq apache org jndi support html http ActiveMQ 20JNDI 并且我的 jboss server node lib 文件夹中有
  • 了解Kafka流groupBy和window

    我无法理解 kafka 流中的 groupBy groupById 和窗口的概念 我的目标是聚合一段时间内 例如 5 秒 的流数据 我的流数据看起来像 value 0 time 1533875665509 value 10 time 153
  • JPA Web 应用程序管理策略

    我们目前正在开发一个 J2EE Web 应用程序 使用 JPA 作为我们的数据访问层 我们目前正在研究几种不同的策略来在我们的应用程序中利用缓存 Create an EntityManager per request 在请求范围内获取缓存
  • 无法连接到docker中的elasticsearch容器

    我正在尝试使用 docker 的官方 elasticsearch 镜像 我遵循了本指南 https www elastic co guide en elasticsearch reference current docker html但是当
  • 开发者环境-如何调用/消费其他微服务

    背景 我的环境 Java Play2 MySql 我在 Play2 gt S1 S2 S3 上编写了 3 个无状态 Restful 微服务 S1 消耗来自 S2 和 S3 的数据 因此 当用户点击 S1 时 该服务会异步调用 S2 S3 合
  • 在java中执行匿名pl/sql块并获取结果集

    我想执行匿名 PL SQL 并需要获取结果集对象 我得到了可以通过在 PL SQL 块内使用游标来完成的代码 但 PL SQL 块本身将以文本形式来自数据库 所以我无法编辑该 PL SQL 块 并且它只会返回两个值 其列名始终相同 它将返回
  • Java 中序列化的目的是什么?

    我读过很多关于序列化的文章 以及它如何如此美好和伟大 但没有一个论点足够令人信服 我想知道是否有人能真正告诉我通过序列化一个类我们真正可以实现什么 让我们先定义序列化 然后我们才能讨论它为什么如此有用 序列化只是将现有对象转换为字节数组 该
  • com.sun.xml.ws.message.saaj.SAAJHeader 无法转换为 com.sun.xml.ws.security.opt.impl.outgoing.SecurityHeader

    我正在尝试访问第三方 Web 服务 该服务要求我创建一个传递时间信息 用户名和密码的安全标头 我在网上搜索了可行的示例 并尝试了多种方法 我正在尝试使用 Java 6 中内置的内容来做到这一点 我不确定我做错了什么 从 WSDL 生成 We
  • Unicode(希腊语)字符存储在数据库中,例如“??????”

    数据库中的希腊字符就像问号 我找不到解决办法 我使用 Java Swing 开发了一个应用程序 但是当我在 MySQL 中插入希腊字母时 就像问号一样 我将数据库排序规则更改为 utf8 并将列也更改为 utf8 我的项目编码设置为UTF

随机推荐

  • 实现strstr函数

    题目 给定两个两个字符串 str1和str2 str1是否包含str2 若包含则返回字符串出现的第一个位置 错误返回 1 示例1 输入 str1 hello str2 ll 输出 2 思路 1 判断两个字符串长度大小 2 判断两个字符串是否
  • The Serenity Prayer

    The Serenity Prayer God grant me the serenity to accept the things I cannot change courage to change the things I can an
  • JavaScript 身份证号合法验证

    let reg 1 9 d 5 18 19 20 3 d d 2 0 1 9 1 0 2 0 2 1 9 10 20 30 31 d 3 0 9Xx if reg test this dataForm visitorCode false t
  • 某个网站(比如CSDN、GitHub)突然打开、加载很慢,有些途径访问正常、其他网站访问正常,可尝试指定域名服务器的IP地址,不走DNS查询。

    摘要 若在电脑上访问某个网站比如CSDN主页 CSDN 专业开发者社区 GitHub主页 GitHub Let s build from here GitHub 通过WIFI或者网线访问很慢 甚至网页打不开 但通过流量访问却很快 访问其他网
  • VSCode出现请更新includePath错误的解决方法

    问题 文件添加 include
  • epoll 与select poll区别

    1 select gt 时间复杂度O n 它仅仅知道了 有I O事件发生了 却并不知道是哪那几个流 可能有一个 多个 甚至全部 我们只能无差别轮询所有流 找出能读出数据 或者写入数据的流 对他们进行操作 所以select具有O n 的无差别
  • ajax跨域post文件上传,ajax跨域上传文件加了xhr报不支持options错误

    用ajax跨域上传文件不加xhr就能请求成功 为了实现进度条功能在ajax里面加了xhr就报错了 ajax url http localhost 823 api FileStream Upload type post contentType
  • python序列和字典

    一 序列 1含义 包含若干个元素 元素有序排列 可通过下标访问一个或多个元素这样的对象 eg 字符串 列表 元组 2 标准类型操作符 expr 1 lt expr 2 3 序列类型操作符 1 in not in 判定一个元素是否在序列中 返
  • 如何复制网上的收费文本

    选中你要复制的内容打开f12开发者工具 查看选中部分地方源代码 鼠标左键打开 直接复制完事 新手博主 请前辈批评指正 丁一
  • JAVA接口实验:卡车要装载一批货物,货物由电视机、计算机和洗衣机组成,卡车需要计算出整批货物的重量。

    卡车要装载一批货物 货物由电视机 计算机和洗衣机组成 卡车需要计算出整批货物的重量 编写能够满足如下条件的程序 定义一个接口 包含计算货物重量的抽象方法 分别定义实现上述接口的用于计算电视机 计算机和洗衣机的类 定义一个卡车类 在其中定义一
  • Android软件开发之获取通讯录联系人 联系人图像

    Android软件开发之获取通讯录联系人信息 十二 发布于2011 10 12 图中选中的数据库 contacts2 db就是系统储存联系人的数据库 我们将它打开看看里面储存了些什么东东 打开contacts db后 发面里面有一堆表 同学
  • Java定时注解@Scheduled的使用,fixedDelay,fixedRate,cron的使用

    Java定时注解 Scheduled的使用 fixedDelay fixedRate cron的使用 问题背景 参数简介 项目创建 测试结果 心得 Lyric 咸咸的汗水 问题背景 项目中经常使用定时任务 spring提供了定时注解 很方便
  • 前端笔试题1

    HTML CSS 题1 1 使用CSS 让该节点不可见 方法越多越好 div class hidden Hi div 使用CSS 让节点不可见的方法有以下几种 把 visibility 属性设置为 hidden 这样元素框不会被绘制 但仍然
  • 【C++】详解声明和定义

    2023年8月28日 周一下午 研究了一个下午才彻底弄明白 写到晚上才写完这篇博客 目录 声明和定义的根本区别 结构体的声明和定义 声明结构体 定义结构体 类的声明和定义 函数的定义和声明 声明函数 定义函数 变量声明和定义 声明变量 定义
  • 人工智能的三个层次:运算智能,感知智能,认知智能

    2016年 人工智能成为产业界和学术界的大热词 年初 李世石与Alpha Go的人机围棋大战吸睛无数 人工智能的话题始料未及地席卷了世界每处 此外 今年也恰逢人工智能学科诞生一甲子 Alpha Go再一次打败人类 受到全世界的瞩目 历经波折
  • android集成友盟推送遇到的问题

    在自身项目集成友盟推送时 参考了官方文档的教程 导入 PushSDK 把下载的 zip 文件解压缩 解压后的文件路径不能有中文 把解压缩后得到的目录下的 PushSDK 当做 Module 导入到自己的工程 在之前的 AndroidMani
  • C++——可变模板参数

    声明 由于对可变模板参数了解资源有限 以下有些观点仅为个人参考手册实践得出的 不要被我个人的观点误导 文章目录 一 基本语法知识 1 基本知识 2 基本语法 二 基本使用方法 1 基本演示 2 参数展开 一 基本语法知识 1 基本知识 C
  • linux文件系统初始化过程(2)---挂载rootfs文件系统

    一 目的 本文主要讲述linux3 10文件系统初始化过程的第一阶段 挂载rootfs文件系统 rootfs是基于内存的文件系统 所有操作都在内存中完成 也没有实际的存储设备 所以不需要设备驱动程序的参与 基于以上原因 linux在启动阶段
  • 无监督学习分类

    目录 1 聚类 1 1 K 均值算法 K Means 1 2 层次聚类 Hierarchical Clustering 1 3 基于密度聚类Mean Shift 1 4 基于密度聚类DBSCAN 1 5 高斯混合模型 GMM 与EM 1 6
  • 加密算法 AES和RSA

    一 加密 一 加密基础 通过互联网发送数据 数据可能会被第三者恶意窃听 造成损失 因此需要给重要的数据进行加密 加密后的数据被称为 密文 接收方通过解除加密或得原本的数据 把密文恢复为原本数据的操作叫做 解密 像这样就减少了数据被恶意窃听的