作为一个数学一般, 又不是安全相关专业的程序猿. 每次碰到需要加密的时候都不知道如何选择一种合适的加密的算法. 总结一下图解加密算法书中对各个算法的评价. 以后需要选择的时候也有了依据.
首先需要了解密码的一些常识与原则.
- 不要使用保密的密码算法.
- 不要试图通过保密算法来提高安全性.
- 不要使用自己发明的算法
- 使用低强度的密码比不使用密码更不安全
- 任何密码总有一天会被破解(除了随机密码本)
- 密码只是信息安全的一部分
单向散列函数
单向散列函数也称哈希函数, 单向散列函数的评价标准就是抗碰撞性. 抗碰撞性分为强和弱两种:
- 强碰撞性: 要找到散列值相同的两条不同的消息是非常困难的
- 弱碰撞性: 要找到和一个消息散列值相同的另一个消息是非常困难的
常见的 Hash 算法有: MD4/MD5, SHA-1/SHA-2/SHA-3, RIPEMD-160. 格式算法的情况如下:
|算法|强碰撞性被攻破|推荐度|
|:--- :|:----------------:|:-------:|
|MD4/MD5 |是 |不推荐使用|
|SHA-1 |是 |不应该被用于新环境中|
|SHA-2 |否 |推荐使用|
|SHA-3 |否 |推荐使用|
|RIPEMD-160 |否 |可以使用|
综上所述, 需要使用散列函数的时候最好选择 SHA-2 和 SHA-3, RIPEMD-160 也可以选择, 但是实际使用范围没有 SHA-2 和 SHA-3 广.