📄 genfile.h
字号:
#ifndef _GENFILE_H_
#define _GENFILE_H_
#include <iostream.h>
#include <windows.h>
#include "SPN.h"
/*产生完全随机文件filename,文件大小为size个字。
NOR为1时,产生符合固定差分NorVal的明文,用于差分攻击。*/
void RadomFile(char *filename,unsigned long size,int NOR=0,unsigned int NorVal=0){
ofstream fout(filename,ios::binary);
if(fout==NULL){
cout<<"Open file erro!\n";
exit(0);
}
time_t t;
srand((unsigned)time(&t));
for(unsigned long i=0;i<size;i++){
unsigned char c1, c2;
Sleep(0);
Char((unsigned int)rand(),c1,c2);
fout.put(c1); fout.put(c2);
if(NOR){
unsigned int k=NorVal^i;
Char((unsigned int)k,c1,c2);
fout.put(c1); fout.put(c2);
i++;
}
}
fout.close();
}
/*产生固定文件filename,起始位置随机产生(按整数顺序排列),文件大小为size个字。
NOR为1时,产生符合固定差分NorVal的明文,用于差分攻击。*/
void FixFile(char *filename,long int size,int NOR=0,unsigned int NorVal=0){
ofstream fout(filename,ios::binary);
if(fout==NULL){
cout<<"Open file erro!\n";
exit(0);
}
time_t t;
srand((unsigned)time(&t));
Sleep(0);
long int temp=(long int)rand();
size+=temp;
for(long int i=temp;i<size;i++){
unsigned char c1, c2;
Char((unsigned int)i,c1,c2);
fout.put(c1); fout.put(c2);
if(NOR){
unsigned int k=NorVal^i;
Char((unsigned int)k,c1,c2);
fout.put(c1); fout.put(c2);
i++;
}
}
fout.close();
}
/*产生破解中间文件CipherFileName,覆盖原来的密文文件,
用于破解上层密钥(除了最底层子密钥)。AppKey为破解出的密钥,
iSbox为S逆盒,iPbox为P逆盒,Nr+1为迭代次数,layer为破解层数。*/
void GenUpCrackFile(char *CipherFileName,unsigned int *AppKey,
unsigned int *iSbox,unsigned int *iPbox,
int Nr,int layer){
char *TempFileName="TempFile.txt";
ifstream fin(CipherFileName,ios::nocreate|ios::binary);
ofstream fout(TempFileName,ios::binary);
if(fin==NULL||fout==NULL){
cout<<"Open file erro!\n";
exit(0);
}
while(fin.peek()!=EOF){
unsigned char c1, c2;
fin.get(c1); fin.get(c2);
unsigned int y=Int(c1,c2);
y^=AppKey[layer];
if(layer!=1&&layer!=Nr)
y=Per(y,iPbox);
y=Sub(y,iSbox);
Char(y,c1,c2);
fout.put(c1); fout.put(c2);
}
fin.close();
fout.close();
DeleteFile(CipherFileName);
MoveFile(TempFileName,CipherFileName);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -