📄 code.c
字号:
{int i,j,k;
int temp,sum;
for(i=0;i<4;i++)
for(j=0;j<Nb;j++)
{sum=0;
for(k=0;k<8;k++)
{if((*(*(pinfo+i)+j)/(int)pow(2,k))%2!=((*(*(pRoundKey+i)+round*Nb+j)/(int)
pow(2,k))%2))
temp=1;
else
temp=0;
sum=sum+temp*(int)pow(2,k);
}
*(*(pinfo+i)+j)=sum;
}
}/*异或*/
void KeyExpansion(int (*pKey_Original)[Nk],int (*pRoundKey)[N*Nb+Nb])
{int i,j,k;
int sum,temp;
int a[8]={0,0,0,0,0,0,0,1};
int b[8]={0,0,0,0,0,0,0,0};
int RC[(N*Nb+Nb-1)/Nk+1];
RC[1]=1;
for(j=0;j<Nk;j++)
for(i=0;i<4;i++)
*(*(pRoundKey+i)+j)=*(*(pKey_Original+i)+j);
for(j=2;j<(N*Nb+Nb-1)/Nk+1;j++)
{b[0]=a[1];
b[1]=a[2];
b[2]=a[3];
b[3]=a[0]+a[4];
b[4]=a[0]+a[5];
b[5]=a[6];
b[6]=a[0]+a[7];
b[7]=a[0];
sum=0;
for(k=0;k<8;k++)
{a[k]=b[k]%2;
sum=sum+a[k]*(int)pow(2,7-k);
}
RC[j]=sum;
}
for(j=Nk;j<N*Nb+Nb;j++)
{if(j%4!=0)
{for(i=0;i<4;i++)
{sum=0;
for(k=0;k<8;k++)
{if((*(*(pRoundKey+i)+j-1)/(int)pow(2,k))%2!=((*(*(pRoundKey+i)+j-4)/(int)pow
(2,k))%2))
temp=1;
else
temp=0;
sum=sum+temp*(int)pow(2,k);
}
*(*(pRoundKey+i)+j)=sum;
}
}
if(j%4==0)
{for(i=0;i<4;i++)
*(*(pRoundKey+i)+j)=*(*(pRoundKey+i)+j-1);
temp=*(*(pRoundKey+0)+j);
for(i=0;i<4;i++)
*(*(pRoundKey+i)+j)=*(*(pRoundKey+i+1)+j);
*(*(pRoundKey+3)+j)=temp;
for(i=0;i<4;i++)
*(*(pRoundKey+i)+j)=SearchSbox(*(*(pRoundKey+i)+j));
sum=0;
for(k=0;k<8;k++)
{if((*(*(pRoundKey+0)+j)/(int)pow(2,k))%2!=((RC[j/Nk]/(int)pow(2,k))%
2))
temp=1;
else
temp=0;
sum=sum+temp*(int)pow(2,k);
}
*(*(pRoundKey+0)+j)=sum;
for(i=1;i<4;i++)
{sum=0;
for(k=0;k<8;k++)
{if((*(*(pRoundKey+i)+j)/(int)pow(2,k))%2==1)
temp=1;
else
temp=0;
sum=sum+temp*(int)pow(2,k);
}
*(*(pRoundKey+i)+j)=sum;
}
for(i=0;i<4;i++)
{sum=0;
for(k=0;k<8;k++)
{if((*(*(pRoundKey+i)+j)/(int)pow(2,k))%2!=((*(*(pRoundKey+i)+j-Nk)/(int)pow
(2,k))%2))
temp=1;
else
temp=0;
sum=sum+temp*(int)pow(2,k);
}
*(*(pRoundKey+i)+j)=sum;
}
}
}
}/*密钥扩展*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -