(最新版)密码学实验报告 下载本文

result[3]=temp[20]; result[4]=temp[28]; result[5]=temp[11]; result[6]=temp[27]; result[7]=temp[16]; result[8]=temp[0]; result[9]=temp[14]; result[10]=temp[22]; result[11]=temp[25]; result[12]=temp[4]; result[13]=temp[17]; result[14]=temp[30]; result[15]=temp[9]; result[16]=temp[1]; result[17]=temp[7]; result[18]=temp[23]; result[19]=temp[13]; result[20]=temp[31]; result[21]=temp[26]; result[22]=temp[2]; result[23]=temp[8]; result[24]=temp[18]; result[25]=temp[12]; result[26]=temp[29]; result[27]=temp[5]; result[28]=temp[21]; result[29]=temp[10]; result[30]=temp[3]; result[31]=temp[24];

}

void s_box(int a[][6],int sbox[][4][16],int f1[32])//查找s盒 {

int row,colu,c_[8]; int i,j,k; for(i=0;i<8;i++) {

row=a[i][0]*2+a[i][5];

colu=a[i][1]*2*2*2+a[i][2]*2*2+a[i][3]*2+a[i][4];

c_[i]=sbox[i][row][colu]; }

for(i=0;i<8;i++) {

k=c_[i];

for(j=0;j<4;j++) {

if(k%2==0) {

f1[i*4+j]=0; } else {

f1[i*4+j]=1; }

k=k/2; } } }

void F(int r[],int k[],int f[],int sbox[][4][16])

{

int a[48],b[8][6],f1[32]; int i,j,temp; temp=r[31];

for(i=31;i>0;i--)//置换E {

r[i]=r[i-1]; }

r[0]=temp; for(j=0;j<8;j++) {

a[j]=r[j]; }

for(i=1;i<8;i++) {

for(j=0;j<6;j++) {

a[i*6+j]=r[i*6-2+j]; } }

yihuo48(a,k);//经行异或运算 for(i=0;i<8;i++) {

for(j=0;j<6;j++) {

b[i][j]=a[i*6+j]; } }

s_box(b,sbox,f1);//按照s盒查找

for(i=0;i<32;i++) {

f[i]=f1[i]; }

p_swap(f);//p置换 }

void feistel(int l[],int r[],int k[],int sbox[][4][16]) { int i;

int temp[32],f[32]; F(r,k,f,sbox); yihuo32(l,f); for(i=0;i<32;i++) {

temp[i]=r[i]; r[i]=l[i]; l[i]=temp[i]; } }

void ip1(int fei_result[64],int des[]) { int i,k;

int secret[8][8];

for(i=39,k=0;k<8,i>=32;k++,i--) {

secret[k][0]=fei_result[i]; }

for(i=7,k=0;k<8,i>=0;k++,i--) {

secret[k][1]=fei_result[i]; }

for(i=47,k=0;k<8,i>=40;k++,i--) {

secret[k][2]=fei_result[i]; }

for(i=15,k=0;k<8,i>=8;k++,i--) {

secret[k][3]=fei_result[i]; }

for(i=55,k=0;k<8,i>=48;k++,i--) {

secret[k][4]=fei_result[i]; }

for(i=23,k=0;k<8,i>=16;k++,i--) {

secret[k][5]=fei_result[i]; }

for(i=63,k=0;k<8,i>=56;k++,i--) {

secret[k][6]=fei_result[i]; }

for(i=31,k=0;k<8,i>=24;k++,i--) {

secret[k][7]=fei_result[i]; }

for(i=0;i<8;i++)//将得到的加密后的2进制数转换成字母 {

des[i]=secret[i][0]+secret[i][1]*2+secret[i][2]*2*2+secret[i][3]*2*2