常用的加密算法及应用场景总结

2,407 阅读4分钟

最近碰到很多加密算法类型的问题,尝试总结一下(大概整理了一下~)

1.单向散列哈希算法

MD5 ,SHA(128、256)系列(信息摘要算法)是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。单向散列函数是一种不可逆的信息摘要算法,无法通过密文还原成明文

应用场景:

用于密码存储

用于生成信息的摘要,校验数据的完整性:

2.对称加密算法

常见的对称加密算法有 DES3DESAESBlowfishIDEARC5RC6。由于算法效率较高,一般用于对效率有要求的实时数据加密通信。比如在使用 VPN 或者代理进行 加密通信时,既要保证数据的保密性,又要保证不能有高的延迟,所以通常会使用对称加密算法。

3.非对称加密(RSA算法)

它需要两个密钥,一个是公钥,另一个是私钥,一个用于加密,另一个用于解密。如果其中一个密钥用于加密明文,则原始明文只能用对应的另一个密钥解密;即使最初用于加密明文的密钥也不能用作解密。因为加密和解密需要两个不同的密钥,所以称为非对称加密。

PS:通常情况下,公钥的长度一般比较短,所以我们会将公钥对外公开,让别人使用公钥来加密数据。而我则使用私钥解密数据,但是切记基于非对称的特性,我们也是可以使用公开私钥加密,而使用公钥解密。之所以不这样做仅仅是因为私钥通常比公钥要长,传输起来比较费资源而已。

数字签名

对称与非对称的比较:

分析这两种算法的特点可以知道,单纯的使用 对称加密(如:AES) 的来加密两者传输中的数据的时候首先要让双方要知道秘钥是什么,可问题就是这个秘钥的传输是一个问题,直接通过网络传输是极其不安全的。因为网络一旦被监听,这个秘钥就没有存在的意义了,而监听一个网络,难度并不是很大,所以我们不能直接使用 AES

再来看非对称加密算法(如:RSA),由于RSA是非对称的加密算法,私钥用来解密,公钥用来加密,公钥之所以带“”,也是因为其本身就是就需要对外公开的,并不需要保密。这样对于通信双方来说,建立链接之后的第一件事就是双方分发自己的公钥给对方,一端数据传输给对方的时候,先使用接收方发过来的公钥对数据进行加密后再发送,之后接收方会使用自己的私钥解密数据得到明文,然后再使用对方的公钥加密敏感的响应数据,之后再发送给对方,对方拿自己的私钥解密。这样就完成了数据的加密传输通信。

我们分析这个过程可以知道,整个传输过程中,只是对外暴露了公钥,这时即使黑客拿到了公钥,但是也无法解密传输过程中的数据,因为只有私钥才能解密数据。这样看起来就完美的解决了双方的加密通信问题。

但是有这种加密算法相比 AES 比较耗资源,对于一个访问量比较大的web服务来说,是不推荐的。

为什么对称加密AES比非对称加密RSA快?

基本上来说大致有几点:

  1. 首先密钥生成肯定较慢,因为rsa密钥出了随机性要求还需要满足数学约束。

  2. 其次密钥长度不同,同等安全强度下rsa密钥长度远大于aes。另外aes的运算本质上来说就是位移和替换而rsa需要大的模数运算。

  3. 最后AES方法现今已经有了专门针对其的硬件加速指令,运行速度远远快于RSA

RSA是以幂模运算为基础 c^e mod N。要注意这里面无论是c,e还是N都是数百个二进制位(128/256/512/…)的大数。加密还好说,公钥可以选的比较小,幂指数没那么大。解密的话私钥不可避免是很大的,幂指数大导致幂模很慢。加密解密肯定有一端会比较慢

AES:如果是1024bit的AES,分组可能就是先拆分成16个128-bit AES。AES的基础运算实际有3种,Sbox,XOR以及移位,计算速度快。