资源简介
密码学作业2(分组密码与高级加密标准)
C语言实现SPN线性密码分析
代码片段和文件信息
#include
#include
#include
#include
#include
#define T 1000
int K[5][16]x[16]y[16];
int s[16]={1441312151183106125907}; //s盒
int s_1[16]={1434811210157139611205}; //s盒的逆
int p[16]={0481215913261014371115}; //p盒
int p_1[16]={0481215913261014371115}; //p盒的逆
void Key() //密钥
{
int ij;
int t[32]={0011 1010 1001 0100 1101 0110 0011 1111};
for(i=0;i<5;i++)
for(j=0;j<16;j++)
K[i][j]=t[i*4+j];
}
void untwistKey() //解密用到的轮密钥
{
int ijt[5][16];
for(i=0;i<5;i++)
for(j=0;j<16;j++)
t[i][j]=K[i][j];
for(i=0;i<5;i++)
{
if(i==0||i==4)
{
for(j=0;j<16;j++)
K[i][j]=t[4-i][j];
}
else
{
for(j=0;j<16;j++)
K[i][j]=t[4-i][p_1[j]];
}
}
}
int decimal(int b[]int len) //二进制转换为十进制
{
int i=0s=0;
while(i {
s=s*2+b[i];
i++;
}
return s;
}
void bit(int decint *bitint &len) //十进制转换为二进制
{
len=0;
int it[8];
while(dec!=0)
{
t[len]=dec%2;
len++;
dec=dec/2;
}
for(i=0;i bit[i]=t[len-1-i];
}
void SPN(int *inputint *output) //SPN代换-置换算法
{
int ijrlendectemp[4];
int *w=new int[16]*u=new int[16]*v=new int[16];
for(i=0;i<16;i++) w[i]=input[i];
for(r=0;r<3;r++)
{
for(i=0;i<16;i++) u[i]=(w[i]+K[r][i])%2;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++) temp[j]=u[4*i+j];
dec=decimal(temp4);
bit(s[dec]templen);
for(j=0;j<4-len;j++) v[4*i+j]=0;
for(j=4-len;j<4;j++) v[4*i+j]=temp[j-4+len];
}
for(i=0;i<16;i++) w[i]=v[p[i]];
}
for(i=0;i<16;i++) u[i]=(w[i]+K[3][i])%2;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++) temp[j]=u[4*i+j];
dec=decimal(temp4);
bit(s[dec]templen);
for(j=0;j<4-len;j++) v[4*i+j]=0;
for(j=4-len;j<4;j++) v[4*i+j]=temp[j-4+len];
}
for(i=0;i<16;i++) output[i]=(v[i]+K[4][i])%2;
}
void out(int *inputint *outputint flag=0) //输出明-密文对或密-明文对
{
int i;
if(flag==0) printf(“明文:“);
else printf(“密文:“);
for(i=0;i<16;i++)
{
if(i>0&&i%4==0) printf(“ “);
printf(“%d“input[i]);
}
printf(“\n“);
if(flag==0) printf(“密文:“);
else printf(“明文:“);
for(i=0;i<16;i++)
{
if(i>0&&i%4==0) printf(“ “);
printf(“%d“output[i]);
}
printf(“\n“);
}
void Randtext() //随机生成T个二进制明文
{
int ij;
srand((unsigned)time(NULL)); //保证每次运行得到不同明文
for(i=0;i {
for(j=0;j<16;j++) x[j]=rand()%2;
S
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-03-28 14:08 SPN线性密码分析\
目录 0 2012-03-28 14:08 SPN线性密码分析\实现教材SPN方案\
文件 52176 2012-03-28 14:01 SPN线性密码分析\实现教材SPN方案\out.txt
文件 4129 2012-03-28 14:04 SPN线性密码分析\实现教材SPN方案\教材SPN方案.cpp
文件 59 2012-03-28 14:07 SPN线性密码分析\实现教材SPN方案\说明.txt
目录 0 2012-03-28 14:08 SPN线性密码分析\实现教材SPN线性密码分析\
文件 288006 2012-03-28 13:27 SPN线性密码分析\实现教材SPN线性密码分析\in.txt
文件 2028 2012-04-15 17:00 SPN线性密码分析\实现教材SPN线性密码分析\SPN线性密码分析.cpp
文件 118 2012-03-28 14:10 SPN线性密码分析\实现教材SPN线性密码分析\说明.txt
评论
共有 条评论