TCP/IP协议二十一:HTTPS/SSL协议详解(1)加密原理

2023-11-07

TCP/IP协议二十二:HTTPS/SSL协议详解(2)HTTPS三次握手及其详解
https://blog.csdn.net/lqy971966/article/details/125391550

1. 加密历史–对称加密算法

1.1 加密

加密就是利用技术手段把重要的数据变为乱码(加密)传送

如:
123 二进制为:1111011
简单加密规则(奇数位取反)就变成加密数据: 0101110
对方收到数据之后解密得到 123

1.2 密钥

加密或解密使用的规则,就叫做密钥

例子:

1. 上面的奇数位取反的方法就是密钥
2. 对“Hani i love u”进行加密,密钥y=12345,其二进制:11 0000 0011 1001,假设生成:0xAkji893
	y这种加密算法/规则就叫做密钥

1.3 对称加密算法

1976年以前,所有的加密方法都是同一种模式

1.甲方选择某一种加密规则,对信息进行加密;

2.乙方使用同一种规则,对信息进行解密。

如上面的对123的二进制进行奇数位取反加密,加密和解密用的同样的密钥:就是奇数位取反。

对称加密算法:

由于加密和解密使用同样规则(简称"密钥"),这被称为"对称加密算法"

缺点:

甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。

2. 非对称加密算法

1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为"Diffie-Hellman密钥交换算法"。
这个算法启发了其他科学家。

人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥

这种新的加密模式被称为"非对称加密算法"。

(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。

(2)甲方获取乙方的公钥,然后用它对信息加密。
  (3)乙方得到加密后的信息,用私钥解密。

如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。

2.1 RSA算法

1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。

这种算法用他们三个人的名字命名,叫做RSA算法。

这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。
也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。
因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。

2.1.1 RSA 非对称加密原理

RSA加密算法原理图:
在这里插入图片描述

参考: https://blog.csdn.net/jijianshuai/article/details/80582187

RSA详细推导参考:RSA算法原理(二)
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

2.1.2 RSA通信示例

在实际应用中我们以Https通信为例来分析RSA的使用过程,现在模拟https通信中client和server的常见对话:

client >>server:你好,我是clientA
server>>client:	你好,我是server。
client >>server:请证明你是Server,str [str 是随机字符串]
server>>client:str{"love u"-hash} //{}中是私钥RSA加密后内容,hash为str的hash
	[client 收到str原文,计算str的hash1,通过证书中RSA公钥解密XXX-hash,获得密文中的内容与hash2,
	比较解密内容与原内容的hash值是否一致,解密的hash和原文计算的hash是否一致,
	都一致说明服务器是真的,可以进行下一步]
client >>server:你确实是server,这是RSA加密算法的秘钥X={0xj8KJ344},以后就用X加密算法通信吧
server>>client:{可以,我做好通信准备了}	[内容经X算法加密]
client >>server:{查询一下我的账户余额}	[内容经X算法加密]

3. 公钥密码体制(public-key cryptography)

公钥密码体制分为三个部分,公钥、私钥、加密解密算法,它的加密解密过程如下:

加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。加密过程需要用到公钥。
解密:通过解密算法和私钥对密文进行解密,得到明文。解密过程需要用到解密算法和私钥。

公钥密码体制的公钥和算法都是公开的(这是为什么叫公钥密码体制的原因),私钥是保密的。
两者都可以加解密数据,公钥加密的内容只能私钥解密,私钥加密的内容只能公钥解密

4. 数据签名

签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过。

签名一般使用的方案:

是对信息做一个hash计算得到一个hash值,然后把这个hash值(加密后)作为一个签名和信息一起发出去。
Hash值需要进行加密是为了防止有人修改hash值。

接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过。

1. 这个过程是不可逆的,也就是说无法通过hash值得出原来的信息内容。
2.不同的内容一定会得到不同的hash值,hash的加解密是为了防止传输过程中被更改,造成信息是否被篡改无法准确验证。

参考:
https://blog.csdn.net/luo_boke/article/details/106013674
RSA算法原理(一)
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
RSA算法原理(二)
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

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

TCP/IP协议二十一:HTTPS/SSL协议详解(1)加密原理 的相关文章

  • java安全套接字无需身份验证?

    我有一个简单的安全套接字服务器 客户端程序 对于服务器证书 我使用 keytool 创建了一个密钥库 当我尝试通过客户端连接到服务器时 出现以下异常 在服务器中 Exception in thread main javax net ssl
  • 证书中的主机名不匹配:<>!=<> WSO2 APIM

    我有一个 https 端点 我需要从 wso2 API 管理器访问它 使用 1 10 我已经将证书文件添加到 client truststore jks 文件中 但现在它给出了如下错误 hostname in certificate did
  • HTTP 和 HTTPS iframe

    我正在创建一个小部件 我想允许其他人使用它 这iframe通过 HTTP 加载 但我想允许用户通过 HTTPS 登录 即通过 SSL 发送登录请求 同源策略中允许这样做吗 即 场景是用户可以将我的 JavaScript 集成到他们的网站 小
  • ubuntu 12.10 上使用 https 和 python 2.7 时出现 urlopen 错误 [Errno 110]

    预先感谢您提供的任何帮助 我在 ubuntu 12 10 上安装了 python 2 7 我根据其他帖子编写了一个简单的脚本来测试 http 和 https 连接 import urllib2 urllib def set proxy pr
  • 具有特定协议版本的 SSL 连接

    我正在尝试使用特定协议版本执行 SSL 连接 使用以下 JAVA 代码 System out println Locating socket factory for SSL SSLSocketFactory sslsocketfactory
  • OpenSSL 无法建立 SSL 连接,因为协议不受支持

    我正在尝试构建 OpenCoghere https wiki opencog org w Building OpenCog当我发出这个命令时 octool rdcpav l default 它构建了所有内容 但随后进入安装 Link Gra
  • 使用 urllib 下载 HTTPS 页面,错误:14077438:SSL 例程:SSL23_GET_SERVER_HELLO:tlsv1 警报内部错误

    我正在使用最新的Kubuntu with Python 2 7 6 我尝试下载一个https使用以下代码的页面 import urllib2 hdr User Agent Mozilla 5 0 X11 Linux x86 64 Apple
  • 使用 iOS 分布式应用程序时 Google Cloud Messaging 显示“notRegistered”

    我在 iOS 应用程序上实现了 GCM 服务 我使用 PHP 在服务器上发送 GCM 当应用程序由开发配置文件签名时 它可以完美运行 也就是说 当应用程序使用 GCM 配置注册自身时 它始终返回一个正常运行的设备令牌 我可以使用令牌向设备发
  • 当 ssl 和 http2 打开时,Nginx 似乎忽略 server_name

    我有这个 nginx 配置 server listen 80 default server listen 80 default server server name www example com return 301 https www
  • 使用 VirtualDocumentRoot 的 SSL 虚拟主机

    我在 ubuntu 16 04 VM 上进行开发工作 当我处理多个项目时 为了让我的生活更轻松 我使用 VirtualDocumentRoot 和主机文件使用 dev 域从我的主文件夹中服务器站点 在 000 default conf 我有
  • Android 2.3.4 SSL问题

    升级到 Android 2 3 4 后 出现以下异常 javax net ssl SSLException Read error ssl 0x I O error during system call Connection timed ou
  • 将 SSLSetEnabledCiphers 与 AFNetworking 结合使用来禁用弱密码

    我正在尝试禁用一些密码 弱 例如单个 DES 单个 DES 40 位等 我尝试过使用这段代码在 Cocoa 中使用 CFSocket CFStream 时如何设置 SSL 密码 https stackoverflow com questio
  • 使用 HTTPS 时我需要/想要 gzip 压缩吗?

    使用 HTTPS 是否已经包含 透明 内容压缩 或者我是否仍然应该担心与浏览器协商是否压缩我的 Servlet 输出 如果 HTTPS 已经有压缩 是无条件的还是需要配置 协商 启用 默认情况下 TLS 不启用压缩 但它 压缩 是在 TLS
  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit 未触发

    我花了几个小时来解决这个问题 但毫无结果 编辑 找到解决方案 参见我的答案 项目背景 我正在构建一个项目Symfony2 这需要一个用于上传大文件的模块 我选择了Node js and Socket IO 我必须从头开始学习 所以我可能会错
  • 未找到证书管理器证书并且未创建挑战

    我跟着https docs cert manager io en venafi tutorials quick start index html https docs cert manager io en venafi tutorials
  • HttpClient SSLException

    我尝试向 Web 服务发送 https 请求 经过几次成功的尝试后 我开始不断收到此错误 这个错误是什么意思 为什么它第一次发生 javax net ssl SSLException java lang RuntimeException C
  • 无法为数据库添加 SSL 支持

    我正在使用 Spring 3 Hibernate 和 postgres 9 2 为了启用 SSL 数据库连接 我按照以下步骤操作 创建自签名证书 参考 http www postgresql org docs 9 2 static ssl
  • 使用 openssl 检查服务器安全协议

    我有一个框架应用程序 它根据使用方式连接到不同的服务器 对于 https 连接 使用 openssl 我的问题是 我需要知道我连接的服务器是否使用 SSL 还是 TLS 以便我可以创建正确的 SSL 上下文 目前 如果我使用错误的上下文尝试
  • 从 WildFly 安全地调用 EJB

    我正在尝试以企业 业务 方式重写我的旧应用程序 因此 我有一个带有登录模块的 Swing 客户端和从头开始创建的我自己的服务器 客户端使用ssl证书加密与服务器的TCP连接 我检查服务器上的客户端证书和客户端上的服务器证书 然后服务器使用数

随机推荐

  • code review

    方法有多种 目前最被认可或运用的方法莫过于CodeReview活动了 那么 CodeReview到底能给团队带来什么 什么样的团队需要进行CodeReview活动 如何有效开展CodeReview活动 用哪种方式会比较好呢 笔者为了接地气地
  • 工业物联网的巨控GRM530无线模块与西门子PLC通信,远程上下载程序

    西门子逆天技术出来了 西门子smart200PLC的数据无线远程传输到上位机 手机APP 概述 随着移动互联网的普及 越来越多的用户希望通过智能手机APP监控工业现场PLC的各种状态 报警等数据 通过手机APP来实现减少人力的投入 还可以实
  • vue中属性key的作用(了解diff),为什么不建议index作为key

    1 官方文档有关key的说明 key 的特殊 attribute 主要用在 Vue 的虚拟 DOM 算法 在新旧 nodes 对比时辨识 VNodes 如果不使用 key Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改 复用
  • 一篇搞定,Kettle详细教程

    文章目录 第一章 Kettle概述 1 1 Kettle发展历程 1 2 Kettle简介 1 3 Kettle相关俗语 1 4 Kettle设计与组成 1 5 Kettle功能模块 1 6 Kettle的执行 Transformation
  • OPT3001光强传感器驱动实现(STM32F407)

    上面是我的微信和QQ群 欢迎新朋友的加入 写了个光强传感器的代码 产品特点 精密光学滤波以匹配人眼 拒绝IR gt 99 典型值 自动满量程设定功能简化了软件 并确保正确的配置 0 01勒克斯至83K勒克斯 23位有效动态范围 自动增益范围
  • 批量汇总nmon结果文件Excel数据

    1 原由 在使用nmon监控服务器资源以后 因为服务器较多 生成了几十个结果文件 现在需要统计每个文件中cpu 内存 disk等平均值 最大值信息 太多表了 就写了个Python脚本 以后可能用的上 先记录一下 nmon生成的Excel中
  • Xml外部实体注入漏洞(XXE)与防护

    Xml外部实体注入 XXE 除了json外 xml也是一种常用的数据传输格式 对xml的解析有以下几种常用的方式 DOM SAX JDOM DOM4J StAX等 然而这几种解析方式都可能会出现外部实体注入漏洞 如微信支付的回调就出现过 见
  • 电脑启机时出\windows\system32\drivers\bootsafe64.sys什么

    开机时出现如下故障解决办法 用老毛桃制作PE启动盘 把C WINDOWS system32 drivers下bootsafe64 sys删除还有一个kavbootc sys删除 重启即可 此问题就出在金山的产品给系统加入的这个文件 它不知出
  • 注释转换(C的多行注释 转换为C++的单行注释)

    目录 题目描述 AnnotationConvert h 状态划分 AnnotationConvert c 处理每个字符 main c 测试代码 Makefile 编译 test in 待测试数据 test out 输出 题目描述 把C的多行
  • 2019年安徽省大数据与人工智能应用赛总结---本科组

    前言 2019年安徽省大数据与人工智能决赛于10月13日在安徽省职业经济管理学院举办 现场赛共计90支队伍 经过4个小时的激烈追逐 我们组获得了22名的不错成绩 荣获省级二等奖 严格意义上说 这是我第一次参加省级比赛 因为缺少比赛经验 所以
  • mysql Initial client character set can be forced via the ‘characterEncoding‘ property.问题

    是数据库版本不一致导致的问题 1查看本地是数据库版本 删除旧包 2在配置文件pom xml文件中修改为对应的版本 3 更新为新的数据连接包 参考https blog csdn net qq 37077976 article details
  • 业务敏捷 SOA从概念到实践迈出的一大步

    2007年5月30号 在北京西四环的世纪金源大酒店宴会厅里 一场关于中国SOA最佳实践的技术大会在这里举行 从Gartner首度提出SOA这个概念到现在已经超过了十个年头 在这十年发展的演变中 SOA的内涵发生了多次的变化 从ESB Web
  • layui使用初步入门

    目录 布局元素 字体图标 按钮 表单 数据表格 弹出层 layui官方地址 layui是模块化框架 这表示你想实现它的某个功能 可以选择不全部引入 只要引入一个一个相关的模块文件即可 引入的方式有两种 一种是将之当成独立组件引入 如 另一种
  • 面试准备1

    上海银行 目录 1 java io 字节流 字符流 使用场景 你了解java的流吗 怎么用流打开一个大文件 2 java序列化 什么时候会用到 必问 3 java集合类 哪些是线程安全的 为什么它们是线程安全的 4 String a a 创
  • leetcode 150-200题-java版(按顺序,不分专题)

    leetcode 150 200题 java版 152 乘积最大子数组 160 相交链表 167 两数之和 输入有序数组 168 Excel表列名称 169 多数元素 172 阶乘后的0 174 地下城游戏 188 买卖股票的最佳时机 4
  • 在学校,你需要知道的8种思维导图的类型及其工作方式

    思维导图是一种学习方法 它可以将学习者的思维和抽象的思想以具体的视觉形象化 具体来说 思维导图可以帮助学习者有效地组织他们的想法和信息 此外 学习者可以更容易地将他们的信息碎片连接起来 这可以提高他们的理解能力 这可以提高他们的理解能力 通
  • Springboot系列(二十二):如何纯文本转成.csv格式文件?

    一 前言 不知道大家有咩有遇到这么个需求 给你一长串文本 要求你能导成excel格式展示数据 一时间我陷入了沉思 如果要常规转excel 最明显的一点就是固定表头名 然而并不是 这表头名是动态给的 连字段名都不相同 这可如何是好 我突然想到
  • error @achrinza/node-ipc@9.2.2: The engine “node“ is incompatible with this module. Expected version

    解决方法三 看报错信息 版本不兼容 这个最好解决了 输入这个命令 该命令是自动补充兼容所报的错误 yarn config set ignore engines true 成功 可以
  • gtest在使用中出现错误:error: undefined reference to ‘testing::internal::EqFailure(char const*, char const*,

    如题 业务需要编写了一个C的API库 顺带写了一个gtest测试用例 但是编译的时候出现题目中的错误 折腾了半天以为是gtest的问题 结果发现是自己CMakelist txt的问题 因为Gtest支持的最低版本是Cxx 14版本 所以只要
  • TCP/IP协议二十一:HTTPS/SSL协议详解(1)加密原理

    TCP IP协议二十一 HTTPS SSL协议详解 1 加密原理 1 加密历史 对称加密算法 1 1 加密 1 2 密钥 1 3 对称加密算法 2 非对称加密算法 2 1 RSA算法 2 1 1 RSA 非对称加密原理 2 1 2 RSA通