-
在ECB模式中,将明文分组加密之后的结果直接作为密文分组,缺点是会容易攻击,因为明文相同的密文相同
目录
- 1概念
- 2ECB模式的优缺点
概念
ECB(Electronic Codebook,电码本)模式是分组密码的一种最基本的工作模式。在该模式下,待处理信息被分为大小合适的分组,然后分别对每一分组独立进行加密或解密处理。如下图所示:
我们可以将其理解为是一个巨大的"明文分组→密文分组"的对应表
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!