常见的加密
一、前言
网络是不安全的,存在各种信息泄漏的风险,而加密就是为了解决这种风险问题的。加密在平时上网和工作生活中,肯定都听说过加密相关的一些内容,像对称加密,非对称加密,md5,aes加密等等,那这些名词的含义是什么?他们之间到底有什么区别呢? 本篇文章旨在说明各种常见的编码加密方式,并了解一些常见的加密场景。
二、名词解释
编码
编码是信息从一种形式或格式转换为另一种形式的过程。
加密解密
加密,是以某种特殊的算法改变原有的数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。 解密为加密的逆过程,即将该编码信息转化为其原有数据的过程。
摘要
所谓的摘要就是一段信息或者一个文件通过某个哈希算法(也叫摘要算法)而得到的一串字符。 摘要算法的特点就是不同的文件计算出的摘要是不同的(也有可能相同,但是可能性非常非常低),比如一个1G的视频文件,哪怕只是改动其中一个字节,最后计算得到的摘要也是完全不同的,所以摘要算法通常是用来判断文件是否被篡改过。其还有一个特点就是通过摘要是无法推导出源文件的信息的。常用的摘要算法有MD5、SHA等。
数字签名
数字签名,是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。 简单来说就是通过提供可鉴别的数字信息验证自身身份 的一种方式。
对称加密
也称为单密钥加密,采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密
非对称加密
非对称加密算法,又称为 公开密钥加密算法。它需要两个密钥,一个称为公开密钥 (public key),即公钥,另一个称为私有密钥 (private key),即私钥,其中公开密钥可以随意发送,私有密钥必须保密。 因为加密和解密使用的是两个不同的密钥,所以这种算法称为 非对称加密算法。
三、常见的加密场景
3.1 https
来看看https的加密过程先看正常http的交互过程,客户端发送内容A到服务端
此时,若有人篡改内容,可以代理服务,将内容A,改为内容B发送给服务端
使用双向非对称加密
但非对称加密比较消耗性能,使用对称加密+非对称加密的方式,减少非对称加密解密的次数
但还是会有漏洞,如果攻击者劫持了返回公钥G1,并返回给客户端自己生成的公钥G2,客户端使用假的公钥加密了密钥后,攻击者再次劫持,使用私钥S2解密后得到密钥,并使用之前劫持的公钥G1加密密钥返回给服务器,这样攻击者就拿到了对称加密的密钥。
所以,客户端拿到服务端的公钥时,需要知道该公钥是不是真正的公钥,这时就需要使用数字证书
四、常见的算法
4.1 base64编码
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。 比如将‘同城’进行base64编码```
// 先获得其码点'同城'.charCodeAt(0) // 21516// 获取二进制编码21516.toString(2) // 101 010000 001100
utf的编码规则根据格式1110xxxx 10xxxxxx 10xxxxxx进行填充, 最终结果如下
11100101 10010000 10001100
三个字节为一位
11100101 10010000 10001100
按照6个比特位一组分组,前两位补0,凑齐8位
111001 011001 000010 001100
00111001 57 -> 5 00011001 25 -> Z 00000010 2 -> C 00001100 12 -> M
```结果为:5ZCM,可以在网站上进行验证<https://www.qqxiuzi.cn/bianma/base64.htm>思考:utf为什么要三个分为一组,转换时又为什么要6个比特为一组分组呢?因为一个字节是8个比特位,8 * 3 = 6 * 4,正好可以保证所有位都被编码
### 4.2 MD5算法
# MD5 用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5 不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5 都会输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符)。MD5 加密后的位数有两种:16 位与 32 位。默认使用32位。 (16 位实际上是从 32 位字符串中取中间的第 9 位到第 24 位的部分)MD5算法有以下特点:1. 压缩性:无论数据长度是多少,计算出来的MD5值长度相同
1. 容易计算性:由原数据容易计算出MD5值
1. 抗修改性:即便修改一个字节,计算出来的MD5值也会巨大差异
1. 抗碰撞性:知道数据和MD5值,很小概率找到相同MD5值相同的原数据
### 4.3 SHA1算法
# SHA1 是和 MD5 一样流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更强。对于长度小于 2 ^ 64 位的消息,SHA1 会产生一个 160 位的 消息摘要。
### 4.4 AES/DES/3DES算法
# AES、DES、3DES 都是 对称 的 块加密算法,加解密 的过程是 可逆的。常用的有 AES128、AES192、AES256
#### 4.4.1 DES算法
# DES 加密算法是一种 分组密码,以 64 位为 分组对数据 加密,它的 密钥长度 是 56 位,加密解密 用 同一算法。 DES 加密算法是对 密钥 进行保密,而 公开算法,包括加密和解密算法。这样,只有掌握了和发送方 相同密钥 的人才能解读由 DES加密算法加密的密文数据。因此,破译 DES 加密算法实际上就是 搜索密钥的编码。对于 56 位长度的 密钥 来说,如果用 穷举法 来进行搜索的话,其运算次数为 2 ^ 56 次。
#### 4.4.2 3DES算法
# 是基于 DES 的 对称算法,对 一块数据 用 三个不同的密钥 进行 三次加密,强度更高。
#### 4.4.3 AES算法
# AES 加密算法是密码学中的 高级加密标准,该加密算法采用 对称分组密码体制,密钥长度的最少支持为 128 位、 192 位、256 位,分组长度 128 位,算法应易于各种硬件和软件实现。 AES只是个基本算法,实现AES有几种模式,主要有ECB、CBC、CFB和OFB这几种(其实还有个CTR)1. ECB模式(电子密码本模式:Electronic codebook) ECB是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理。
1. CBC模式(密码分组链接:Cipher-block chaining) CBC模式对于每个待加密的密码块在加密前会先与前一个密码块的密文异或然后再用加密器加密。第一个明文块与一个叫初始化向量的数据块异或。
1. CFB模式(密文反馈:Cipher feedback) 与ECB和CBC模式只能够加密块数据不同,CFB能够将块密文(Block Cipher)转换为流密文(Stream Cipher)。
1. OFB模式(输出反馈:Output feedback) OFB是先用块加密器生成密钥流(Keystream),然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。
#### 4.5 RSA算法
# RSA是非对称加密算法,RSA 加密算法是目前最有影响力的 公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密 和 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击,已被 ISO 推荐为公钥数据加密标准。 RSA 加密算法 基于一个十分简单的数论事实:将两个大 素数 相乘十分容易,但想要对其乘积进行 因式分解 却极其困难,因此可以将 乘积 公开作为 加密密钥。
# 五、其他的加密方法
### 5.1 加盐
# 即使用户的密码很短,只要我在他的短密码后面加上一段很长的字符,再计算 md5 ,那反推出原始密码就变得非常困难了。加上的这段长字符,我们称为盐(Salt)加盐,就是人为的通过一组随机字符与用户原密码的组合形成一个新的字符,从而增加破译的难度。以下是模拟在登录过程中,对密码进行加盐的过程对密码加盐存储后,即使存储用户密码的库被盗取了,但由于没有对应盐,也无法得到真正的密码,去其他网站撞库。
### 5.2 字体包加密
我们所看到的文字,都有对应的字体文件,字体文件描述着每个文字如何绘制。
字体包加密是使用字体的编码方式对内容进行编码,不同的字体包展示的字体样式是不一样的,可以利用编码后的字体包来达到展示的数据是正常的,但查看源码时是乱码
1. 在服务端,使用反向字体包,将内容编译成字体包的编码格式内容
1. 在客户端,加载该字体包,来展示真正内容
# 六、参考文章https://juejin.cn/post/6844904072856731662https://www.cnblogs.com/sujing/p/10927569.html https://juejin.cn/post/6844903638117122056