加解密算法
Table of Contents
1. 对称加密算法
1.1. DES
常见的分组加密算法(将明文分成固定的长度的组,每一组都采用同一密钥和算法进行加密,输出也是固定长度的密文)。
DES 分组大小是 64 位,如果加密的数据长度不是 64 位,可以按照某种具体的规则进行填充位。虽然 DES 一次只能加密 8 个字节,但我们 只需要把明文划分成 8 个字节一组的块,就可以实现任意长度明文的加密。如果明文长度不是 8 个字节的倍数,还得进行填充。流行的填充 方式是 PKCS7 / PKCS5(都是简单的思路)。另外最后生成的加密块,简单的拼起来是不行的(导致明文中重复的,密文也重复)。
1.2. AES:主流
用户替换 DES。DES 的 56 位密钥过短。
AES 的密钥长度包含 128 位,192 位,256 位。
1.3. base64
用 64 个字符来表示任意二进制数据的方法。 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
echo "me@zhangjiee.com" | base64 echo "bWVAemhhbmdqaWVlLmNvbQo=" | base64 --decode
2. 非对称加密算法
2.1. RSA
https://www.ruanx.net/rsa-intro/
RSA是一种非对称加密算法。谓之“非对称”,是因为加密和解密使用的是不同的密钥。RSA算法利用公钥来加密,用私钥来解密;公钥可以随意 公布,任何人都可以利用公钥来加密一条信息,但只有私钥持有者才能把信息解密。
还有一个特点是,使用私钥加密信息,用公钥可以解密。所以,RSA 也作为数字签名(用于标识这个东西的正确性,不可伪造)。
3. HASH 算法
3.1. MD5
信息摘要算法,广泛使用的密码散列函数,可以产生一个 128bit(16 字节)的散列值。
- 压缩性:无论数据长度多少,输出的 MD5 长度相同;
- 容易计算性:由原数据容易计算出 MD5 值;
- 抗修改性:随便修改一个字节,计算出来的 MD5 值差异也很大;
- 抗碰撞性:原数据不同,很小概率能计算出相同的 MD 值;
3.2. SHA
同样是信息摘要算法,MD5 存在安全隐患,SHA 算是新的摘要算法。
- SHA-0:安全隐患;
- SHA-1:与 MD5 类似,应用场景和缺陷基本都相同;
- SHA-2:SHA-256,SHA-384,SHA-512 统称为 SHA-2。SHA-256 可以生成长度为 256bit 的信息摘要。