加密算法扫盲入门
在日常开发工作中,经常会遇到需要加解密的场景,比如存储和校验用户密码、存储数据库,缓存等中间件的密码、和其它服务进行通信的认证及加密等。
总的来说,加密算法分为如下三类:
一、对称加密
1.1 定义
加密和解密使用相同密钥。
1.2 优缺点
- 加解密比较高效;
- 密钥越长,破解难度越大;
- 公司内不同系统密钥管理繁琐,一旦泄露后果很严重;
- 密钥分发存在被窃取的风险;
1.3 常用算法介绍
-
DES
Data Encryption Standard,数据加密标准,是由美国开发的,密钥长度56位,部分算法黑盒,可能存在后门,而且可以暴力破解,不再推荐。
-
IDEA
International Data Encryption Algorithm,国际数据加密算法,是由瑞士开发的,密钥长度128位,开放安全。
-
AES(推荐)
Advanced Encryption Standard,高级加密标准,是继DES后美国开发的,密钥长度可选,128位、192位、256位,一般情况下我们选择128位就足够安全可靠了。
-
SM1
SM1 Cryptographic Algorithm,国密,密钥128位,算法不公开属于国家机密,一般供重要机构使用。
-
SM4(推荐)
SM4 Cryptographic Algorithm,国密,密钥128位,算法公开属于国家标准,供有国家级别合规需求的场景使用。
1.4 使用场景介绍
- HTTPS、VPN等网络数据传输;
- 应用内中间件密码的存储;
- 存储介质中的用户隐私数据;
二、非对称加密
1.1 定义
加密和解密使用不同的密钥。在加解密场景下,使用公钥对信息进行加密,使用密钥对信息进行解密;在数字签名场景下,使用私钥进行加密,使用公钥进行解密,以此证明信息是私钥拥有者发出的。
1.2 优缺点
- 解决对称加密算法中密钥分发的问题,非对称加密算法的公钥是公开发布的;
- 适用于大部分的认证和数字签名场景,这个是对称加密算法无法实现的;
1.3 常用算法介绍
-
RSA
基于的数学难题是两个大质数相乘的结果很容易计算,但是根据结果做质因数分解得到初始的两个大质数却很难;该算法的优点是效率比较高,密钥越长,加密的安全性越高。
-
ECC(推荐)
基于的数学难题是椭圆曲线,难度比RSA要高,是目前国际上加密强度最高的非对称加密算法。缺点就是效率比较低。
-
SM2(推荐)
也是基于椭圆曲线难题设计,是国密标准,算法公开,供有国家级别合规需求的场景使用。缺点就是效率比较低。
1.4 使用场景介绍
- SSH登录、Git推拉数据等需要认证身份的网络传输场景;
- 存储介质中用户登录密码等敏感数据的存储;
三、Hash算法
1.1 定义
将任意长度的内容经过Hash算法之后得到固定长度的文本内容,原内容只要有一点点修改,Hash之后的内容将变得非常不同,而且根据Hash之后的内容无法反推原内容的信息。
1.2 优缺点
- 简单效率高;
- 鲁棒性,相同的内容经过Hash之后得到的结果是一样的;
- 唯一性,几乎不存在两个不同的消息经过Hash之后会得到相同的结果,但是不绝对;
- 不能确保唯一性,彩虹表攻击能提高被攻破的可能性;
- 需要加盐来提高唯一性,盐越长,安全性就越高。
1.3 常用算法介绍
-
MD5
消息摘要算法,生成一个128位的消息摘要,是目前应用比较广泛的散列算法。目前它的唯一性已经被攻破了,黑客容易使用彩虹表攻击。
-
SHA(推荐)
安全散列算法,SHA分为1和2两个系列的算法版本,其中SHA-256是相对比较安全的散列算法。
-
SM3(推荐)
国密标准,算法公开啊,和SHA-256对标,供有国家级别合规需求的场景使用。
1.4 使用场景介绍
- Git提交记录比对;
- 文件下载后的完整性校验;
- 数据结构Map的实现;
- 存储介质中用户登录密码等敏感数据的存储;
关于Hash算法的原理和使用场景,可以参考以前的两篇文章: