加解密算法

Table of Contents

1. 对称加密算法

1.1. DES

资料:https://www.ruanx.net/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 的信息摘要。

First created: 2022-02-25 14:37:37
Last updated: 2022-12-11 Sun 12:49
Power by Emacs 29.0.91 (Org mode 9.6.6)