加密
什么是加密
加密定义:以保证机密性的方式转换数据的过程。
为此,加密需要使用一个保密工具,称其为“密钥”。
加密密钥和任何其他加密密钥应具有一些属性:
- 为了保护机密性,密钥的值应难以猜测。
- 应该在单个上下文中使用它,避免在不同上下文中重复使用(类比 JS 作用域)。密钥重用会带来安全风险,如果规避了其机密性,则影响更大,因为它“解锁”了更敏感的数据。
加密分类
- 对称加密
- 非对称加密
对称加密
- 用相同的密钥对原文进行加密和解密,通信双方共用一个密钥
- 交易双方都使用同样钥匙,无法确保密钥被安全传递,安全性得不到保证
- 算法公开、计算量小、加密速度快、加密效率高,适合于数据量比较大的加解密
非对称加密
- 公开密钥与私有密钥是一对,如果用公共密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公共密钥才能解密
- 算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
- 安全性会比对称加密高
原理:
- 随机选取两个质数p和q
- 计算 n = pq
- 计算 φ(n) = (p-1)(q-1)
- 找一个与φ(n)互质的小奇数e,互质是指两个数的公约数只有1
- 对模φ(n),计算e的乘法逆元d,即找到一个d,使下列等式成立:(e*d) mod φ(n) = 1
- 得到公钥:(e, n),私钥: (d, n)
- 加密过程:c = (m^e) mod n, (c为加密后的密文,m为原文)
- 解密过程:m = (c^d) mod n
作者:蒋鹏飞
链接:https://juejin.im/post/5e689e336fb9a07c9e1c3903
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
混合加密
流程:
密钥对明文加密,公钥对密钥加密
传输加密后明文,和加密后的密钥
私钥解析出公钥加密后的密钥,密钥再解析加密后的明文
- 使用了对称加密快的优点,以及非对称加密的安全性
哈希
哈希算法定义:一种只能加密,不能解密的密码学算法,可以将任意长度的信息转换成一段固定长度的字符串。
加密算法是可逆的(使用密钥),并且可以提供机密性(某些较新的加密算法也可以提供真实性),而哈希算法是不可逆的,并且可以提供完整性,以证明未修改特定数据。
- 在强大的哈希算法中,如果有两个不同的输入,则几乎不可能获得相同的输出
- 如果计算后的结果范围有限,就会存在不同的数据经过计算后得到的值相同,这就是哈希冲突
编码
编码定义:将数据从一种形式转换为另一种形式的过程,与加密无关。
它不保证机密性,完整性和真实性这三种加密属性,因为:
- 不涉及任何秘密且是完全可逆的。
- 通常会输出与输入值成比例的数据量,并且始终是该输入的唯一值。
- 编码方法被认为是公共的,普遍用于数据处理。
- 编码永远不适用于操作安全性相关。
URL编码
又叫百分号编码,是统一资源定位(URL
)编码方式。URL
地址(常说网址)规定了:
- 常用的数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(
/,:@
等) - 剩下的其它所有字符必须通过
%xx
编码处理。
编码方法很简单,在该字节ascii
码的 16 进制字符前面加%
. 如 空格字符,ascii
码是 32,对应 16 进制是’20’,那么urlencode
编码结果是:%20
。
HTML实体编码
Base64/32/16编码
base64
、base32
、base16
可以分别编码转化 8 位字节为 6 位、5 位、4 位。
16,32,64 分别表示用多少个字符来编码,
Base64
常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME
的email,email via MIME
,在XML
中存储复杂数据。
编码原理:
Base64
编码要求把 3 个 8 位字节转化为 4 个 6 位的字节之后在 6 位的前面补两个 0,形成 8 位一个字节的形式
6 位 2 进制能表示的最大数是 2 的 6 次方是 64,这也是为什么是 64 个字符的原因
A-Z,a-z,0-9,+,/
这 64 个编码字符,=
号不属于编码字符,而是填充字符
编码表: