📄 mixcolumns.cpp
字号:
#include "stdafx.h"
#include "MixColumns.h" //Different
void count_ffe(int temp[4]);
int Fin_field_math(int a,int b);
void Fin_field_mul(int t_bit[8],int b_bit[8]);
void Fin_field_mul(int t_bit[8],int b_bit[8]);
//Different
int Fin_field_e[4][4]={
{0x02,0x03,0x01,0x01},
{0x01,0x02,0x03,0x01},
{0x01,0x01,0x02,0x03},
{0x03,0x01,0x01,0x02}
};
void MixColumns(int state[4][4])
{
int i=0;
int j=0;
int temp[4];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
temp[j]=state[j][i];
}
count_ffe(temp);
for(j=0;j<4;j++)
{
state[j][i]=temp[j];
}
}
}
void count_ffe(int temp[4])
{
int medi[4]={0,0,0,0};
int i=0;
int j=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
medi[i]=medi[i]^Fin_field_math(Fin_field_e[i][j],temp[j]);
}
}
for(i=0;i<4;i++)
{
temp[i]=medi[i];
}
}
int Fin_field_math(int a,int b)
{
int i;
int a_bits[8];
int b_bits[8];
int c_bits[8];
int d_bits[8]={0,0,0,0,0,0,0,0};
int t_bits[8];
int ans[8]={0,0,0,0,0,0,0,0};
byte2bit(a,a_bits);
byte2bit(b,b_bits);
for(i=7;i>=0;i--)
{
if(a_bits[i]==1)
{
bit_copy(d_bits,t_bits);
bit_copy(b_bits,c_bits);
t_bits[i]=1;
Fin_field_mul(t_bits,c_bits);
bit_xor(ans,c_bits);
}
}
return bit2byte(ans);
}
void Fin_field_mul(int t_bit[8],int b_bit[8])
{
int i=0;
int j=0;
int m[8]={1,1,0,1,1,0,0,0};
for(i=7;i>=1;i--)
{
if(t_bit[i]==1)
{
Rot_bit(b_bit);
if (b_bit[0]==1)
{
b_bit[0]=0;
bit_xor(b_bit,m);
}
t_bit[i]=0;
t_bit[i-1]=1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -