首页
社区
课程
招聘
[原创]AES加密中列混合的具体算法
发表于: 2012-3-1 10:28 5824

[原创]AES加密中列混合的具体算法

2012-3-1 10:28
5824

AES明文在加密过程中涉及到字节代换、行移位、列混合、轮密钥加等过程。这里对列混合的算法做出一些浅显的解释。
列混合其实就是对一个状态的每一列去乘一个矩阵,其中乘法是在有限域GF(2^8)内进行的,不可约多项式为x^8+x^4+x^2+x+1如图:

先把算法代码列出来:

void AES::MixColumns(unsigned char state[][4])    //列混合
{
  unsigned char t[4];
  int r,c;
  for(c=0; c< 4; c++)      //按列处理
  {
    for(r=0; r<4; r++)
    {
      t[r] = state[r][c];      //每一列中的每一个字节拷贝到t[r]中
    }
    for(r=0; r<4; r++)
    {
      state[r][c] = FFmul(0x02, t[r])      //矩阵计算,其中加法为异或
            ^ FFmul(0x03, t[(r+1)%4])
            ^ FFmul(0x01, t[(r+2)%4])
            ^ FFmul(0x01, t[(r+3)%4]);
    }
  }
}

unsigned char AES::FFmul(unsigned char a, unsigned char b)    //有限域GF(2^8)上的乘法
{
  unsigned char bw[4];
  unsigned char res=0;
  int i;
  bw[0] = b;
  for(i=1; i<4; i++)
  {
    bw[i] = bw[i-1]<<1;
    if(bw[i-1]&0x80)
    {
      bw[i]^=0x1b;
    }
  }
  for(i=0; i<4; i++)
  {
    if((a>>i)&0x01)
    {
      res ^= bw[i];
    }
  }
  return res;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 6
支持
分享
最新回复 (6)
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
内容不错,学习了
2012-3-1 10:32
0
雪    币: 437
活跃值: (110)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
全部代码呢?
2012-3-1 10:43
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错不错,学习了
2012-3-1 10:52
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
5
原来列混合算法是楼主原创,以前确实不知道!
2012-3-1 11:01
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
内容不错,学习了,谢谢
2012-3-9 13:59
0
雪    币: 30
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
这样算的话速度会很慢。一般都是用查表来实现aes。
2012-3-10 16:59
0
游客
登录 | 注册 方可回帖
返回
//