📄 mima.cpp
字号:
#include"stdio.h"
#include"iostream.h"
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include<fstream.h>
#define N 8
int S[16]={0xE,0x4,0xD,0x1,0x2,0xF,0xB,0x8,0x3,0xA,0x6,0xC,0x5,0x9,0x0,0x7};
int P[8]={5,2,6,8,3,7,4,1};
char BoxP(char in)
{
char result=0,i;
for(i=1;i<=8;i++)
result+=((in>>(8-i))&0x1)*(int)pow(2,8-P[i-1]);
return result;
}
char Xor(char key,char in)
{
return key^in;
}
void ZhuanHuan(int X,int* arr)
{
int i;
for(i =1;i<=N;i++){
if((1<<(N-i))&X) arr[N-i]=1;
else arr[N-i]=0;
}
}
int combin(int left,int right)
{
int i;
// for(i=0;i<N/2;i++)
right+=(left<<4)&0xF0;
return right;
}
int bi(char in,char flag)
{
if(flag=='l')
return (in>>4)&0xF;
if(flag=='r')
return in&0xF;
}
void main()
{
unsigned char p,c,u,v,w,key[4]={0};
int s1,s2,i,j,out,inip;
unsigned int times=0,mintimes=65535,po[256]={0},T[256]={0},maxtimes=0;
time_t t;
srand((unsigned) time(&t));
// inip=p=rand()%256;
int tt=rand();
int rr=rand();
int ww=rand();
long k=(tt*rr+ww)%0xFFFFF;
long result[256]={0};
long ntimes=0;
ofstream of("d:\\result.txt",ios::nocreate);
for(ntimes=0;ntimes<1000;ntimes++)
{
tt=rand();
rr=rand();
ww=rand();
k=(tt*rr+ww)%0xFFFFF;
// cout<<k<<endl;
// cout<<"************************************"<<endl;
for(i=0;i<256;i++)
{
po[i]=0;
T[i]=0;
}
for(inip=0;inip<256;inip++)
{
p=inip;
times=0;
while(c!=inip)
{
key[0]=(k>>12)&0xFF;
key[1]=(k>>8)&0xFF;
key[2]=(k>>4)&0xFF;
key[3]=k&0xFF;
for(i=0;i<2;i++)
{
u=Xor(key[i],p);
s1=bi(u,'l');
s2=bi(u,'r');
s1=S[s1];
s2=S[s2];
v=combin(s1,s2);
w=BoxP(v);
p=w;
}
u=Xor(key[i],p);
s1=bi(u,'l');
s2=bi(u,'r');
s1=S[s1];
s2=S[s2];
v=combin(s1,s2);
c=(unsigned)Xor(key[3],v);
p=c;
times++;
out=c;
// cout<<(int)p<<" "<<(int)c<<endl;
}
po[inip]=times;
// if(maxtimes<times)
// maxtimes=times;
// cout<<(int)inip<<':'<<(int)p<<" "<<(int)c<<endl;
// cout<<times<<endl;
// cout<<"*********************************************"<<endl;
}
// cout<<maxtimes<<endl;
// cout<<"加密密钥为"<<hex<<k<<endl;
for(i=0;i<256;i++)
T[po[i]]++;
for(i=0;i<256;i++)
if(T[i]!=0)
result[T[i]]++;
// cout<<dec<<i<<':'<<T[i]<<endl;
}
float qw=0;
for(i=0;i<256;i++)
{
cout<<dec<<i<<':'<<result[i]<<endl;
of<<result[i]<<endl;
// qw+=result[i]*i;
}
for(i=0;i<30;i++)
qw+=i*result[i]/1000;
cout<<qw/256<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -