📄 diffattack.cpp
字号:
#include "GenFile.h"
#include "DiffAttack.h"
int main(){
//参数设置
unsigned int InitKey=58524; //设置初始密钥
/*输出控制:控制是否输出各个候选子密钥
对应的x'产生u4'的概率表,为1表示输出,为0不输出。*/
int view=1;
char *CrackFileName="CrackFile.txt"; //破解所需特定已知明文文件
char *CipherFileName="CipherFile.txt"; //密文文件
const int Nr=4; //Nr+1为迭代次数
long int size; //已知名密文规模
unsigned int Key[Nr+1]; //={1,24,4544,0xffff,0xffff}; //手动设置轮密钥
unsigned int Sbox[16]={14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7}; //固定S盒
unsigned int Pbox[16]={0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15}; //固定P盒
unsigned int iSbox[16], iPbox[16]; //S及P逆盒
//由初始密钥自动产生轮密钥
GenKey(Key,Nr,InitKey);
//产生S逆盒
GeniBox(Sbox,iSbox);
//产生P逆盒
GeniBox(Pbox,iPbox);
int layer; //所要破解的密钥所属层数
unsigned int subkey; //所要破解的子密钥
unsigned int AppKey[Nr+1]; //破解所得密钥存放的数组
//破解第Nr+1轮子密钥
layer=Nr+1; //所要破解的密钥所属层数
//破解子密钥key1、key3
clock_t start=clock(); //设置计时器
subkey=0xf0f0;
size=2000; //设置激励的明文数
//产生激励文件(明文)
FixFile(CrackFileName,size,1,XNorVal(layer,subkey));
//加密激励文件
SPNS(CrackFileName,CipherFileName,Key,Nr,Sbox,Pbox);
//破解,view为1时显示各个候选子密钥对应的x'产生u4'的概率表。
AppKey[layer-1]=DiffAttack(CrackFileName,CipherFileName,
iSbox,iPbox,Nr,layer,subkey,view);
//输出破解时间
cout<<"破解第"<<layer<<"层子密钥的K1、k3部分所用的时间为: ";
cout<<(double)(clock()-start)/CLOCKS_PER_SEC<<endl<<endl;
//破解子密钥key2、key4
start=clock(); //设置计时器
subkey=0x0f0f;
size=4000; //设置激励的明文数
//产生激励文件(明文)
FixFile(CrackFileName,size,1,XNorVal(layer,subkey));
//加密激励文件
SPNS(CrackFileName,CipherFileName,Key,Nr,Sbox,Pbox);
//破解,view为1时显示各个候选子密钥对应的x'产生u4'的概率表。
AppKey[layer-1]|=DiffAttack(CrackFileName,CipherFileName,
iSbox,iPbox,Nr,layer,subkey,view);
//输出破解时间
cout<<"破解第"<<layer<<"层子密钥的K2、k4部分所用的时间为: ";
cout<<(double)(clock()-start)/CLOCKS_PER_SEC<<endl<<endl;
//输出真实密钥
for(int i=Nr;i<Nr+1;i++){
cout<<"\n真实的第"<<i+1<<"层子密钥为: \n";
Binary(Key[i]);
cout<<endl;
}
//输出破解密钥
for(i=Nr;i<Nr+1;i++){
cout<<"\n破解出的第"<<i+1<<"层子密钥为: \n";
Binary(AppKey[i]);
cout<<endl;
}
cout<<endl;
//删除临时文件,返回。
DeleteFile(CrackFileName);
DeleteFile(CipherFileName);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -