ECB模式详解

2019-04-14 17:10发布

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

在ECB模式中,将明文分组加密之后的结果直接作为密文分组,缺点是会容易攻击,因为明文相同的密文相同

目录

  1. 1概念
  2. 2ECB模式的优缺点
概念 ECB(Electronic Codebook,电码本)模式是分组密码的一种最基本的工作模式。在该模式下,待处理信息被分为大小合适的分组,然后分别对每一分组独立进行加密或解密处理。如下图所示:
我们可以将其理解为是一个巨大的"明文分组→密文分组"的对应表
ECB模式下的加解密过程
ECB模式下的加解密过程

ECB模式的优缺点

编辑 ECB模式作为一种基本工作模式,具有操作简单,易于实现的特点。同时由于其分组的独立性,利于实现并行处理,并且能很好地防止误差传播。 另一方面由于所有分组的加密方式一致,明文中的重复内容会在密文中有所体现,因此难以抵抗统计分析攻击。 因此,ECB模式一般只适用于小数据量的字符信息的安全性保护,例如密钥保护。


ECB模式优点: 1. 简单 2. 有利于并行计算 3. 误差不会被传送   ECB模式缺点: 1. 不能隐藏明文的模式 2. 可能对明文进行主动攻击   对ECB模式的攻击,截图来源自图解密码技术一书:   ECB模式的加密: 复制代码 #include #define IN #define OUT //假设加密分组为4字节一组 /************************************************************************** *功 能: 加密算法 (与Key异或) *参 数: lpszData 当前明文分组数据 * lpszKey Key * lpszDeData 加密后的结果 * *返回值: **************************************************************************/ void Encrypt(IN const char *lpszData, IN const char *lpszKey, OUT char *lpszEnData) { int i = 0; for (i = 0; i < 4; i++) { lpszEnData[i] = lpszData[i] ^ lpszKey[i]; } } /************************************************************************** *功 能: 解密算法 (再次异或还原明文) *参 数: lpszData 当前密文分组数据 * lpszKey Key * lpszDeData 解密后的结果 * *返回值: **************************************************************************/ void Decrypt(IN const char *lpszData, IN const char *lpszKey, OUT char *lpszDeData) { int i = 0; for (i = 0; i < 4; i++) { lpszDeData[i] = lpszData[i] ^ lpszKey[i]; } } int main(int argc, char* argv[]) { char *lpszData = "Hello World!"; char szEnData[16] = {0}; char szDeData[16] = {0}; char *lpszKey = "1234"; int i = 0; printf("原始数据: %s ", lpszData); while (true) { if (strlen(lpszData + i) == 0) { break; } Encrypt(lpszData + i, lpszKey, szEnData + i); i += 4; } printf("加密后数据: %s ", szEnData); i = 0; while (true) { if (strlen(szEnData + i) == 0) { break; } Decrypt(szEnData + i, lpszKey, szDeData + i); i += 4; } printf("解密后数据: %s ", szDeData); return 0; } 复制代码
原数据: Hello World! 加密后: yW_X^d[C^W 解密后: Hello World!