- 首先,明文肯定是不行的
- 第二,单纯使用 MD5、SHA-2 将密码摘要后存储也不行,简单密码很容易被彩虹表攻击,例如
- 攻击者可以把常用密码和它们的 MD5 摘要结果放在被称作【彩虹表】的表里,反查就能查到原始密码
加密结果 |
原始密码 |
e10adc3949ba59abbe56e057f20f883e |
123456 |
e80b5017098950fc58aad83c8c14978e |
abcdef |
... |
... |
因此
- 要么提示用户输入足够强度的密码,增加破解难度
- 要么我们帮用户增加密码的复杂度,增加破解难度
- 可以在用户简单密码基础上加上一段盐值,让密码变得复杂
- 可以进行多次迭代哈希摘要运算,而不是一次摘要运算
- 还有一种办法就是用 BCrypt,它不仅采用了多次迭代和加盐,还可以控制成本因子来增加哈希运算量,让攻击者知难而退
1.5【追问】比较一下 DES、AES、SM4
它们都是对称加密算法
- DES(数据加密标准)使用56位密钥,已经不推荐使用
- AES(高级加密标准)支持 128、192、256位密钥长度,在全球范围内广泛使用
- SM4(国家商用密码算法)支持 128位密钥,在中国范围内使用
1.6【追问】比较一下 RSA、ECDSA 和 SM2
它们都是非对称加密算法
- RSA 的密钥长度通常为 1024~4096,而 SM2 的密钥长度是 256
- SM2 密钥长度不需要那么长,是因为它底层依赖的是椭圆曲线、离散对数,反过来 RSA 底层依赖的是大数分解,前者在相同安全级别下有更快的运算效率
- SM2 是中国国家密码算法,在国内受政策支持和推广
- ECDSA 与 SM2 实现原理类似