ECB模式详解
-
ECB模式(电子密码本模式)
在ECB模式中,将明文分组加密之后的结果直接作为密文分组,缺点是会容易攻击,因为明文相同的密文相同
概念
ECB(Electronic Codebook,电码本)模式是分组密码的一种最基本的工作模式。在该模式下,待处理信息被分为大小合适的分组,然后分别对每一分组独立进行加密或解密处理。如下图所示:
我们可以将其理解为是一个巨大的"明文分组→密文分组"的对应表
我们可以将其理解为是一个巨大的"明文分组→密文分组"的对应表
ECB模式的优缺点
编辑ECB模式作为一种基本工作模式,具有操作简单,易于实现的特点。同时由于其分组的独立性,利于实现并行处理,并且能很好地防止误差传播。
另一方面由于所有分组的加密方式一致,明文中的重复内容会在密文中有所体现,因此难以抵抗统计分析攻击。
因此,ECB模式一般只适用于小数据量的字符信息的安全性保护,例如**保护。
ECB模式优点:
1. 简单
2. 有利于并行计算
3. 误差不会被传送
ECB模式缺点:
1. 不能隐藏明文的模式
2. 可能对明文进行主动攻击
对ECB模式的攻击,截图来源自图解密码技术一书:
ECB模式的加密:
#include <STRING.H> #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\r\n", lpszData); while (true) { if (strlen(lpszData + i) == 0) { break; } Encrypt(lpszData + i, lpszKey, szEnData + i); i += 4; } printf("加密后数据: %s\r\n", szEnData); i = 0; while (true) { if (strlen(szEnData + i) == 0) { break; } Decrypt(szEnData + i, lpszKey, szDeData + i); i += 4; } printf("解密后数据: %s\r\n", szDeData); return 0; }
原数据: Hello World!
加密后: yW_X^d[C^W
解密后: Hello World!