对称加密概念梳理,理解加密流程

发布时间:2023年12月26日

在密码学中,分组加密(Block cipher),又称分块加密或块密码,是一种对称密钥算法。 它将明文分成多个等长的模块(block),使用确定的算法和对称密钥对每组分别加密解密。

常见的分组加密算法有: DES、3DES、AES、IDEA。

工作模式

分组密码算法只能加密固定长度的分组。
例如,DES和三重DES的分组长度都是64bit。这些密码算法一次只能加密64bit的明文.并生成64bit的密文。

由于分组密码算法只能加密固定长度的分组,但是如果我们需要加密的明文长度超过分组密码的分组长度,这时就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。而迭代的方法就称为分组密码的模式(mode)。

主要有以下模式:

  • ECB模式:Electronic CodeBook mode(电子密码模式)
  • CBC模式:Cipher Block Chaining mode(密码分组链接模式)
  • CFB模式:Cipher FeedBack mode(密文反馈模式)
  • OFB模式:Output FeedBack mode(输出反馈模式)
  • CTR模式:CounTeR mode(计数器模式)

常见分组密码算法分组长度和秘钥长度如下表:
在这里插入图片描述

填充方式

通常而言,分组的最后一块数据也要使用合适填充方式将数据扩展到匹配密码块大小的长度。
一般采用的填充方式有如下几种:

  • ANSIX923
ANSIX923 填充字符串由一个字节序列组成,
此字节序列的最后一个字节填充字节序列的长度,其余字节均填充数字零。
假定块长度为8,数据长度为 9,数据: FF FF FF FF FF FF FF FF FF,
填充: FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07
  • ISO10126
ISO10126 填充字符串由一个字节序列组成,
此字节序列的最后一个字节填充字节序列的长度,其余字节填充随机数据。
假定块长度为 8,数据长度为 9,数据: FF FF FF FF FF FF FF FF FF,
填充: FF FF FF FF FF FF FF FF FF 7D 2A 75 EF F8 EF 07
  • PKCS7
PKCS7 填充字符串由一个字节序列组成,
每个字节填充该字节序列的长度。
假定块长度为 8,数据长度为 9,数据: FF FF FF FF FF FF FF FF FF,
填充: FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07,
如果恰好8个字节时还要补8个字节的0x08,可以让解密的数据很确定无误的移除多余的字节。
PKCS5Padding 和 PKCS7Padding 在这方面是类似的。
不同点在于,选择算法的时候如果选用 PKCS5Padding 填充模式,就是明确指定块大小是 8 个字节。
选用 PKCS7Padding 则是没有明确指定块大小。
如果选择算法的时候选用 PKCS7Padding 填充模式,同时设置块大小为 8 字节,和选用 PKCS5Padding 填充模式,没有设置块大小(实际已经设置了 8 字节),这两种情况下,两种填充模式没有区别。
另外有个值得注意的是,AES 中块大小是固定 16 字节。
  • Zeros
填充字符串由设置为零的字节组成

模式比较

ECB是最简单的模式
ECB 将需要加密的明文按照块密码的块大小分为若干块,并对每个块独立进行加密,加密和解密过程。明文和密文是一一对应的,相同的明文分组加密将会得到相应的密文分组。因此,它不能很好的隐藏数据模式。
在这里插入图片描述
CBC需要初始向量IV,先将明文分组与前一个密文分组(或为初始化向量IV)进行XOR运算,然后再进行加密;解密,密文分组先进行解密,然后再进行xor运算得到明文分组。
在这里插入图片描述
其他几种模式就略过了,要求不高的知道这两个就可以了。。。

文章来源:https://blog.csdn.net/henghenghalala/article/details/135216599
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。