对称加密

什么叫对称加密?

  对称加密指的是加密和解密需要使用相同的秘钥,所以如果要使用对称加密来保证通信安全(密码学中叫做机密性)的话,通信双方需要事先共享秘钥。

常见对称密码算法

术语

  1. 分组长度:分组长度指的是对称加密算法运行一次加密的数据长度

des算法

  1. des算法的秘钥长度是64位,有效位为56位,有8位是奇偶校验位,由于有效位太短,所以现在可以在时间允许的范围内,被暴力破解了
  2. des算法采用的是feistel网络设计的,所以他的加密算法(加密过程)和解密算法(解密过程)是一样的,如果不想研究des算法里面的细节,只需要记住feistel网络这个特性即可

3des算法

3des算法的原理

  3des算法其实就是des算法运行了3次,过程依次是加密--解密--加密,至于为什么要设计成加密解密加密这样的过程,是为了兼容des算法,当三次加解密的秘钥相同时,就退化成了des算法

3des原理图

 

3des算法的特点

  1. 3des的密钥有效长度为56位*3=168位,所以3des可以有效提高机密性了
  2. 3des算法虽然提高了安全性,但是他的速度却降低了(要进行3次des加减密操作),所以现在一般都采用下面的AES算法

AES算法

  1. AES算法的分组长度固定为128位,秘钥长度可选为128位,192位,256位
  2. AES算法的加密算法和解密算法并不是相同的

SM1算法

  1. sm1是国密提供的对称加密算法,它是内嵌在硬件设备里面的,算法细节不对外公开
  2. sm1的分组长度为128位

SM4算法

  1. SM4也是国密提供的对称加密算法,不过它的算法细节是对外公开的,和DES,AES算法一样
  2. SM4分组长度和秘钥长度都是128位的

加密模式

为什么要有加密模式?

  我们在前面术语中介绍了分组长度是对称加密算法运行一次加密的数据长度,但是我们要加密的数据长度肯定远远大于这个分组长度,所以我们需要在加密前对明文先进行分组,但是最后一个分组,可能他的长度不够分组长度,这个时候,我们需要对最后一个分组进行填充到算法支持的分组长度以后,然后才使用对称加密算法对每一个分组进行加密

对称加密算法的填充

pkcs5padding

怎么进行填充的?

String result = 明文;

if(明文的分组长度<对称加密算法的分组长度){
    // 单位是字节,注意不是位
    int i = 对称加密算法的分组长度-明文分组长度字节数;
     for(int j=0;j<i;j++){
         result+=i;  
    }
}else if(明文的分组长度==对称加密算法的分组长度){
    //当明文的分组长度等于对称加密算法的分组长度时,这个时候需要填充一个额外多余的分组长度,大家可以想一想为什么要这样做
     int i = 对称加密算法的分组长度;
     for(int j=0;j<i;j++){
         result+=i;  
    }
}

 

特点:

  1. pkcs5padding只能填充对称加密算法的分组长度为8字节(64位)的算法,所以所述的算法只有DES能够使用pkcs5padding,当然3DES的对称加密算法也能够支持,因为他的原理就是DES算法

pkcs7padding

  pkcs7padding的原理和pkcs5的原理是一模一样的,不相同的是,pkcs7padding支持分组长度小于等于32字节(256位),而pkcs5padding只支持8字节(64位)的分组长度,当然当分组长度为8字节(64位)的时候,pkcs5padding和pkcs7padding的填充结果是相同的

两个概念

  1. 分组密码:先对明文进行分组,然后使用对称加密算法对每一个分组进行加密,然后把所有组的密文拼接起来就是密文
  2. 流密码:指的可以对连续的明文进行加密,而明文不需要去进行分组,上面的对称加密算法是不支持对连续的明文进行加密的,但是上面的对称加密算法通过配合特定的加密模式来达到这样的效果

加密模式

ECB模式(电子密码本模式)

原理图

ECB原理

优点:

  1. 易于理解
  2. 可以进行并行的加解密

缺点:

  1. 相同的明文分组会产生的相同的密文分组
  2. 密文分组在进行传输的过程中,可能会被不法分子把密文分组删除或者调换顺序,所以我们必须要使用其他的方式来保证数据的完整性(就是数据没有被人中途篡改过)

CBC模式(密文分组链接模式)

原理图

CBC原理

优点:

  1. 解决了ECB模式的缺点
  2. 解密过程可以并行化

缺点:

  1. 加密过程不可以并行化

注意点:

  1. 需要提供一个初始化向量IV,初始化向量的长度等于分组长度

CFB模式(密文反馈模式)

原理图:

CFB原理

优点:

  1. 解决了ECB模式的缺点
  2. 可以进行并行解密
  3. 支持流密码,因为他不直接加解密明文,他是通过加密初始化向量,得到加密结果以后,让这个加密结果和明文进行异或得到密文,这个就是使用分组密码来实现流密码的原理

缺点:

  1. 不可以进行并行加密

注意点:

  1. 需要提供一个初始化向量IV,初始化向量的长度等于分组长度

OFB模式(输出反馈模式)

原理图

OFB原理

 

优点:

  1. 解决了ECB模式的缺点
  2. 支持流密码

缺点:

  1. 不可以进行并行加密和解密

注意点:

  1. 需要提供一个初始化向量IV,初始化向量的长度等于分组长度

TCR模式(计数器模式)

原理图

TCR模式原理

优点:

  1. 解决了ECB模式的缺点
  2. 支持流密码
  3. 支持并行加解密

注意点:

  1. 需要提供一个初始化向量IV,初始化向量的长度等于分组长度

posted @ 2020-10-09 18:08  想上进的coder  阅读(703)  评论(0)    收藏  举报