⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genfile.h

📁 spn算法加密和解密
💻 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 + -