AES加密算法原理

简介

一般的加密通常都是块加密,如果要加密超过块大小的数据,就需要涉及填充和链加密模式,本文对对称加密和分组加密中的几种种模式进行一一分析(ECB、CBC、CFB、OFB,CTR)

电码本模式 Electronic Codebook Book (ECB)

概述

这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密。


AES加密算法原理_第1张图片
ECB.jpg

特点分析

优点:

  • 简单;
  • 有利于并行计算;
  • 误差不会被传送;
    缺点:
  • 不能隐藏明文的模式;
  • 可能对明文进行主动攻击;

代码演示

/**
*@autho stardust
*@time 2013-10-10
*@param 实现AES五种加密模式的测试
*/
#include 
using namespace std;

//加密编码过程函数,16位1和0
int dataLen = 16;   //需要加密数据的长度
int encLen = 4;     //加密分段的长度
int encTable[4] = {1,0,1,0};  //置换表
int data[16] = {1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0}; //明文
int ciphertext[16]; //密文

//切片加密函数
void encode(int arr[])
{
    for(int i=0;i

密码分组链接模式 Cipher Block Chaining (CBC)

概述

这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。


AES加密算法原理_第2张图片
CBC.jpg

特点分析

优点:

  • 不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。
    缺点:
  • 不利于并行计算;
  • 误差传递;
  • 需要初始化向量IV

代码演示

#include 
using namespace std;

//加密编码过程函数,16位1和0
int dataLen = 16;   //需要加密数据的长度
int encLen = 4;     //加密分段的长度
int encTable[4] = {1,0,1,0};  //置换表
int data[16] = {1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0}; //明文
int ciphertext[16]; //密文

//切片加密函数
void encode(int arr[])
{
    for(int i=0;i

计算器模式Counter (CTR)

概述

计算器模式不常见,在CTR模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密,但是 在计算器不能维持很长的情况下,密钥只能使用一次 。CTR的示意图如下所示:

AES加密算法原理_第3张图片
CTR.jpg

特点分析

优点:

  • 无填
  • 同明文不同密
  • 每个块单独运算,适合并行运算。
    缺点:
  • 可能导致明文攻击。

代码演示

#include 
using namespace std;

//加密编码过程函数,16位1和0
int dataLen = 16;   //需要加密数据的长度
int encLen = 4;     //加密分段的长度
int encTable[4] = {1,0,1,0};  //置换表
int data[16] = {1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0}; //明文
int ciphertext[16]; //密文

//切片加密函数
void encode(int arr[])
{
    for(int i=0;i

密码反馈模式(Cipher FeedBack (CFB)

概述

AES加密算法原理_第4张图片
CFB.jpg

特点分析

优点:

  • 隐藏了明文模式;
  • 分组密码转化为流模式;
  • 可以及时加密传送小于分组的数据;
    缺点:
  • 不利于并行计算;
  • 误差传送:一个明文单元损坏影响多个单元;
  • 唯一的IV;。

代码演示

/**
*@autho stardust
*@time 2013-10-10
*@param 实现AES五种加密模式的测试
*/
#include 
using namespace std;

//加密编码过程函数,16位1和0
int dataLen = 16;   //需要加密数据的长度
int encLen = 4;     //加密分段的长度
int encTable[4] = {1,0,1,0};  //置换表
int data[16] = {1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0}; //明文
int ciphertext[16]; //密文

//切片加密函数
void encode(int arr[])
{
    for(int i=0;i

输出反馈模式Output FeedBack (OFB)

概述

AES加密算法原理_第5张图片
OFB.jpg

特点分析

优点:

  • 同明文不同密文,分组密钥转换为流密码。
    缺点:
  • 串行运算不利并行
  • 传输错误可能导致后续传输块错误。

代码演示

/**
*@autho stardust
*@time 2013-10-10
*@param 实现AES五种加密模式的测试
*/
#include 
using namespace std;

//加密编码过程函数,16位1和0
int dataLen = 16;   //需要加密数据的长度
int encLen = 4;     //加密分段的长度
int encTable[4] = {1,0,1,0};  //置换表
int data[16] = {1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0}; //明文
int ciphertext[16]; //密文

//切片加密函数
void encode(int arr[])
{
    for(int i=0;i

你可能感兴趣的:(AES加密算法原理)