加密算法扫盲入门

在日常开发工作中,经常会遇到需要加解密的场景,比如存储和校验用户密码、存储数据库,缓存等中间件的密码、和其它服务进行通信的认证及加密等。

总的来说,加密算法分为如下三类:

一、对称加密

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算法的原理和使用场景,可以参考以前的两篇文章:

  • 哈希算法的使用场景 - (jianshu.com)
  • 散列表和散列函数 - (jianshu.com)

你可能感兴趣的:(加密算法扫盲入门)