HTTP协议默认是采取明文传输的,容易被中间人窃听、拦截、篡改,存在安全隐患。

常见提高安全性的方法是对通信内容进行加密,再进行传输,常见的加密方式有

不可逆加密:单向散列函数

可逆加密:对称加密、非对称加密

其它组合加密:混合密码、数字签名、证书

单向散列函数

单向散列函数是一种不可逆的加密方式,加密后不能再解密将数据恢复原样,通过单向散列函数根据根据消息内容计算出散列值,无论消息的长度、大小是多少,最终生成的散列值长度都是固定值。

常见的散列函数有 MD5、SHA,虽然说具备单向性,但仍然有些网站可以暴力破解较为简单的内容。

但加密的原始内容更为复杂的话,破解的可能性就会较为小一些,比如开启大小写+字符的方式。

不可逆的加密方式可用于保存一些不需要还原的敏感信息,比如用户的密码,如果明文存放无论是开发者、网络维护人员看到、或者被黑客攻击都会存在信息泄露的问题,那么加密保存便是一种比较合适的方式。

比如当用户注册时,保存的密码是经过单向散列函数加密存放在数据库的,当用户登录时,将输入的密码加密后和数据库中保存的进行比较。即使用户忘记密码,也无需考虑还原原密码,让用户重新设置新密码即可。

对称加密

在对称加密中,加密、解密时使用的是同一个密钥。

对称加密算法常用 DES、3DES、AES

对称加密密钥如何配送仍然会存在问题,除非私下共享,只要经过网络明文传输,都存在被拦截窃取的可能。

我们换个思路,是否存在一种加密方式,即使配送密钥的被窃取了,也不用担心,因为单单只用一个密钥不会影响数据传递。非对称加密就是这样,加密和解密都需要公钥和私钥两个密钥共同协作。

非对称加密

在非对称加密中,密钥分为加密密钥和解密密钥,两者并不相同,加密密钥一般是公开的,因此也称为公钥,解密密钥由消息接收者自己保管,不能公开,也称为私钥

公钥和私钥是一一对应的,不能单独生成,一堆公钥和私钥统称为密钥对,由公钥加密的密文,必须使用与该公钥对应的私钥才能解密,由私钥加密的密文,必须使用与该私钥对应的公钥才能解密。

这样,使用非对称加密便可以解决密钥配送问题,由接收者生成密钥对,将公钥配送给消息发送者,发送者通过公钥加密消息后,发送密文给接收者,接收者再通过私钥解密消息。

在这个过程中,即使消息、公钥被中间人窃听也没关系,因为公钥加密的消息只可通过对应的私钥解密,而私钥是保存在接收者处的。

非对称加密比较安全,解决了密钥的配送问题,但它的加密速度比对称加密要更慢一些,如果所有内容都采用非对称加密,那网络上通信将变得非常慢。

混合密码

混合密码是将对称加密非对称加密优势相结合的方法,解决了对称加密的密钥配送,非对称加密速度慢的问题。

使用对称加密将消息加密,再通过非对称加密算法加密对称加密的密钥,这样就能保证复杂的内容使用加密较快的对称加密,而重要的信息通过非对称加密。

数字签名

以上方式从接收者的角度,可以保证消息的在传输过程的安全,但如何能保证来源的可靠性呢?如果被窃听,中间人也是可以通过公钥加密伪造消息发送给接收者的。

数字签名 就是一种保障来源的方式,与以上混合加密不同,是由消息发送者的私钥生成签名,由消息接收者通过公钥验证签名。

消息是明文传输不安全,并且使用非对称加密所有的消息会比较耗时,可以改进为使用散列函数将消息加密,再通过私钥对散列函数加密,因为散列函数不可逆可以解决安全问题,并且散列函数处理过的数据长度是一个比较短的固定值,能解决耗时的问题。

证书

公钥的配送仍然可能存在问题,如果存在中间人窃听了公钥,可以自己生成一套密钥对,并将自己的公钥传递给消息发送方。

为了保证公钥的安全性,可以依靠于认证机构来颁发数字签名。

总结

  • 单向散列函数不可逆,加密后长度固定
  • 对称加密解密使用的是相同的密钥,加密速度较快,但密钥的配送存在安全问题
  • 非对称加密存在密钥对,分为加密密钥公钥和解密密钥私钥,加密速度较慢
  • 混合密码结合对称加密和非对称加密,同时做到安全和较快的加密速度
  • 数字签名用于确认消息的完整性,识别消息是否被篡改
  • 证书保证公钥的安全

以上就是各种加密方式,以解决HTTP协议带来的安全问题。更多有关 前端网络协议 的内容可以参考我其它的博文,持续更新中~

加密解决HTTP协议带来的安全问题的更多相关文章

  1. 解决float浮动带来的父元素高度没有的问题---清除浮动

    float的特性 : 1:使元素block块级化: 2:破坏性造成的紧密排列特性. 基于以上的特性,使得我们通常把浮动用来布局,带来的问题是,容易出问题,重用性不行,ie6-的版本下很多问题,因为它是 ...

  2. 浅谈利用同步机制解决Java中的线程安全问题

    我们知道大多数程序都不会是单线程程序,单线程程序的功能非常有限,我们假设一下所有的程序都是单线程程序,那么会带来怎样的结果呢?假如淘宝是单线程程序,一直都只能一个一个用户去访问,你要在网上买东西还得等 ...

  3. 加密传输SSL协议2_传统加密

    原本到了睡觉的时间,但是做完了SSL的笔记还有GCC和Oracle等的好多的笔记,所以刻苦一点. The Priciple of Encryption/Decryption --conventiona ...

  4. android黑科技系列——分析某直播App的协议加密原理以及调用加密方法进行协议参数构造

    一.前言 随着直播技术火爆之后,各家都出了直播app,早期直播app的各种请求协议的参数信息都没有做任何加密措施,但是慢慢的有人开始利用这个后门开始弄刷粉关注工具,可以让一个新生的小花旦分分钟变成网红 ...

  5. load data local带来的安全问题

    load data默认读的是服务器上的文件,但是加上local参数后,就可以将本地具有访问权限的文件加载到数据库中,这在带来方便的同时,也带来了以下安全问题, 可以任意加载本地文件到数据库, 在web ...

  6. C# websocket Server 加密 76号协议

    服务器端源码: 76号协议增加了加密字段 sec-websocket-key1 sec-websocket-key2 以及最后8个字节 服务器必须在握手信息之后发送回解密信息才能握手成功. 解密方式 ...

  7. 加密传输SSL协议7_SSL协议概述

    SSL(Secure Sockets Layer) SSL的功能,可以在通信的双方中建立一个加密的通信通道 同时还可以确认通信的双方是不是就是其声称的人,防止被钓鱼. SSL在网络协议栈中的位置:可以 ...

  8. 加密传输SSL协议6_验证公钥

    如上图所示,我怎么能确定我手里的公钥就是我心中的接收方的公钥呢?怎么防止被钓鱼呢? 解决的办法就是引入一个第三方,一个权威机构,一个我们都相信的机构. 验证公钥,Digital Certificate ...

  9. 加密传输SSL协议5_Hash Function

    怎么对一个大的文件进行签名,因为文件比较大,非对称签名很慢.那么想,我能把这个大的文件通过一种函数变换,变成一个和源文件唯一对应的的小的文件吗?答案是可以的. Hash Function 这里任何的文 ...

  10. 加密传输SSL协议4_综合方案

    隔了那么多天终于有时间继续把这个专题做完了,这次一定连续写完这方面的笔记. 上篇博文说明了非对称加密和对称加密各自的优缺点,那么就很自然的衍生出了一种综合的方案. 两种方案的结合--扬长避短 首先发送 ...

随机推荐

  1. 试用「ChatGPT」几周之后

    冷静下来,不吹不黑. 01 最近半年,互联网一款现象级的应用诞生:「ChatGPT」: 其火爆的程度,不输前面的羊了个羊: 最初了解到ChatGPT还是春节的时候,但那时网上的测评还没引起足够的好奇心 ...

  2. 如何理解 Spring Boot 中的 Starter ?

    假如 没有 Spring Boot Starter,我们有两种方式来创建 Spring Bean. spring xml 模式 (远古模式,并不推荐) spring API 来创建 Spring Be ...

  3. ssh终端工具推荐-WindTerm

    什么是WindTerm 官方github https://github.com/kingToolbox/WindTerm A Quicker and better SSH/Telnet/Serial/ ...

  4. 2020-10-31:java中LinkedTransferQueue和SynchronousQueue有什么区别?

    福哥答案2020-11-01:SynchronousQueue:线程A使用put将数据添加到队列,如果没有其他线程使用take去获取数据,那么线程A阻塞,直到数据被其他线程获取,同理 如果线程B从队列 ...

  5. 2022-07-19:f(i) : i的所有因子,每个因子都平方之后,累加起来。 比如f(10) = 1平方 + 2平方 + 5平方 + 10平方 = 1 + 4 + 25 + 100 = 130。

    2022-07-19:f(i) : i的所有因子,每个因子都平方之后,累加起来. 比如f(10) = 1平方 + 2平方 + 5平方 + 10平方 = 1 + 4 + 25 + 100 = 130. ...

  6. Django4全栈进阶之路5 Model模型

    在 Django 中,模型(Model)是用于定义数据结构的组件,其作用如下: 定义数据结构:模型用于定义数据库中的表格和表格中的字段(列),其中每个模型类对应一个表格,模型中的每个字段对应表格中的一 ...

  7. Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535.

    问题描述 新建表或者修改表varchar字段长度的时候,出现这个错误 Row size too large. The maximum row size for the used table type, ...

  8. IntelliJ IDEA一站式配置【全】(提高开发效率)

    IDEA常用设置(提高开发效率) 本人也是IDEA编译器的忠实用户了,但是有时出于各种原因,比如更换设备等等,IDEA总是需要重新安装配置.这就让我比较苦恼,因为总是记不全自己之前都修改了哪些地方(原 ...

  9. 一文读懂面试官都在问的Log4J2漏洞

    CVE-2021-44228 漏洞简介 Apache Log4j2是一个基于Java的日志记录工具,当前被广泛应用于业务系统开发,开发者可以利用该工具将程序的输入输出信息进行日志记录. 2021年11 ...

  10. To ChatGPT:让你更加随意地使用所有ChatGPT应用

    现在其实已经有很多在线的llm服务了,当然也存在许多开源部署方案,但是不知道大家有没有发现一个问题,目前基于ChatGPT开发的应用,都是使用的OpenAI的接口.换句话说,如果没有OpenAI账号, ...