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

📄 etext.cpp

📁 实现des加密的功能,包括有des的基本代码,以及ecb、cbc两种加密功能!没有界面~
💻 CPP
字号:
#include <iostream.h>
#include "deshead.h"
#include "fstream.h"
#include "string.h"
#include "malloc.h"
#include "stdio.h"
#include <math.h>
/*char context[1024];


char temp8;


char bufer[1024];   //定义了一个1024个字符组来充当计算过程中的临时变量

char miyao;
*/
dats yuanwen;
void jiami();
void jiemi();
des des;
int modeflag;
char inkey[8];
char iniv[8];

chars key;
chars iv;
dats mingwen;
dats miwen;
void main()
{
	int i;
	cout<<"选择加密模式:"<<endl<<"(1)cbc"<<endl<<"(2)ecb"<<endl;
	cin>>modeflag;
	if (modeflag==1) {
			cout<<"你选择了cbc加密模式:"<<endl;
			cout<<"请输入密钥及初始化矢量IV:"<<endl;
			for (i=0;i<8;i++) {
				cin>>inkey[i];
			}
			cout<<"请输入初始化矢量IV:"<<endl;
			for (i=0;i<8;i++) {
				cin>>iniv[i];
			}
	}
	if (modeflag==2) {
			cout<<"你选择了ecb加密模式:"<<endl;
			cout<<"请输入密钥:"<<endl;
			for (i=0;i<8;i++) {
				cin>>inkey[i];
			}
	}

	jiami();
	jiemi();

	cout<<"haha"<<endl;
}





void jiami() 
{
	int miyaolenth=8,i;
	ifstream fin;//
	ofstream fout;//

	if (miyaolenth==8)//如果密钥为8位,正常加解密
	{

		

		//////////////////////////////////////////////////////////////////////////
		//							//ECB加密模式//								//
		//////////////////////////////////////////////////////////////////////////
		
		if (modeflag==2) 
		{
					
			//添加代码为加密程序,包括读取密钥,进行转化,并对明文进行加密;
			//创建"明文.dat","密文.dat",读取明文数据,
			des.GetTxt();
			des.jiami_ecb();

			//////////////////////////////////////////////////////////////////////////
			//					加密显示信息										//
			//////////////////////////////////////////////////////////////////////////
							//
			/*fout.open("密钥.dat");//
			for (i=0;i<8;i++)//
			{
				fout<<key.ch[i];//
			}
			fout.close();//			
			
			fout.open("密文.dat");//
			for (i=0;i<miwen.totalchar;i++)//
			{
				fout<<miwen.dat[i];//
			}
			fout.close();//

			fout.open("密文字符总数为.dat");
			fout<<miwen.totalchar;
			fout.close();*/
			fout.open("密钥.dat");//
			for (i=0;i<8;i++)//
			{
				fout<<inkey[i];//
			}
			fout.close();//			
			
		

			fout.open("密文字符总数为.dat");
			fout<<miwen.totalchar;
			fout.close();

		
		}

		//////////////////////////////////////////////////////////////////////////
		//								 //CBC加密模式//						//
		//////////////////////////////////////////////////////////////////////////
		
	
		else if (modeflag==1)
		{

			
				des.GetTxt();
				des.jiami_cbc();


				
			fout.open("密钥.dat");//
			for (i=0;i<8;i++)//
			{
				fout<<inkey[i];//
			}
			fout.close();//			
			

		
			//添加代码为加密程序,包括读取密钥,进行转化,并对明文进行加密;
			//创建"明文.dat","密文.dat",读取明文数据,
			//CBC


			
	//密钥为空时提醒
		
			






		}
		
	
	}	
//密钥为空时提醒
	
//密钥长度不够时提醒
	
}


void jiemi() 
{

	// TODO: Add your control notification handler code here
	//添加代码为解密程序,包括读取密钥,进行转化,并对明文进行解密;
	//将解密文件输出到"原文.dat"
	char ch;
	int i=0;
	ifstream fin;
	ofstream fout;
	miwen.totalchar=0;
	fin.open("密文.dat");
	while (fin.get(ch)) 
	{
		miwen.totalchar++;
		miwen.dat[i]=ch;
		i=i+1;
	}
	fin.close();

	if (modeflag==2) 
	{
		des.jiemi_ecb();
	}
	else if (modeflag==1) {
		des.jiemi_cbc();
	
	}




		fout.open("原文字符总数为.dat");
	fout<<mingwen.totalchar;
	fout.close();








}
des::jiami_ecb()
{
	chars mingwen8;
	ifstream fin;
	ofstream fout;
	mingwen8.totalchar=8;
	int len1,num1,i,j;
	chars outch8;
for (i=0;i<8;i++) {
	key.ch[i]=inkey[i];
	key.totalchar=8;
}
	num1=mingwen.totalchar/8;
	len1=mingwen.totalchar%8;
	for (i=0;i<num1;i++)
	{
		for (j=0;j<8;j++)
		{
			mingwen8.ch[j]=mingwen.dat[i*8+j];
		}
		desblock(mingwen8,key,true,& outch8);
		for (j=0;j<8;j++) 
		{
			miwen.dat[i*8+j]=outch8.ch[j];
		}
		miwen.totalchar=num1*8;
	}
	if (len1!=0)
	{
		for (i=0;i<8;i++) 
		{
			mingwen8.ch[i]='0';
		}
		for (i=0;i<len1;i++) 
		{
			mingwen8.ch[i]=mingwen.dat[num1*8+i];
		}
		desblock(mingwen8,key,true,& outch8);
			for (j=0;j<8;j++) 
		{
			miwen.dat[num1*8+j]=outch8.ch[j];
		}
			miwen.totalchar=(num1+1)*8;

	}
		fout.open("密文.dat");//
			for (i=0;i<miwen.totalchar;i++)//
			{
				fout<<miwen.dat[i];//
			}
			fout.close();//

	
}
des::jiemi_ecb()
{
	chars miwen8,outch;
	int i,j,num2;
	ifstream fin;
	ofstream fout;
	
	num2=miwen.totalchar/8;
	miwen8.totalchar=8;
	key.totalchar=8;
for (i=0;i<8;i++) {
	key.ch[i]=inkey[i];
		key.totalchar=8;
}
		fout.open("密文总数为1.dat");
	fout<<num2;
	fout.close();
	

	for (i=0;i<num2;i++)
	{
		for (j=0;j<8;j++)
		{
			miwen8.ch[j]=miwen.dat[i*8+j];
		}
		desblock(miwen8,key,false,& outch);
		for (j=0;j<8;j++) 
		{
			yuanwen.dat[i*8+j]=outch.ch[j];
		}
	}
	yuanwen.totalchar=num2*8;
		fout.open("原文.dat");//
	for (i=0;i<mingwen.totalchar;i++)//
	{
		fout<<yuanwen.dat[i];//
	}
	fout.close();//
}
des::jiami_cbc()
{
	chars mingwen8,outch8,iv;
	ifstream fin;
	ofstream fout;
	mingwen8.totalchar=8;
	int len1,num1,i,j;
	bits bts1,bts2,xores;


	for (i=0;i<8;i++) {
	key.ch[i]=inkey[i];
		key.totalchar=8;
}
	for (i=0;i<8;i++) {
		iv.ch[i]=iniv[i];
		iv.totalchar=8;
	}
		fout.open("字符总数为1.dat");
	fout<<mingwen.totalchar;
	fout.close();



	//初始向量IV	chars iv;
/*	for (i=0;i<8;i++)
	{
		iv.ch[i]=m_IV.GetAt(i);
	}*/
	chartobits(iv,&bts1);
		bts1.totalbit=64;


	num1=mingwen.totalchar/8;
	len1=mingwen.totalchar%8;



	for (i=0;i<num1;i++)
	{	
		for (j=0;j<8;j++)
		{
			mingwen8.ch[j]=mingwen.dat[i*8+j];
		}	
	
		chartobits(mingwen8,&bts2);	
			bts2.totalbit=64;

		exclusiveOR(bts1,bts2,&xores);//error

		bitstochar(xores,&mingwen8);

		desblock(mingwen8,key,true,& outch8);
			
		for (j=0;j<8;j++) 
		{
			miwen.dat[i*8+j]=outch8.ch[j];
		}	
		
		chartobits(outch8,&bts1);
				bts1.totalbit=64;

	
	}
	miwen.totalchar=num1*8;
	if (len1!=0)
	{
		for (i=0;i<8;i++) 
		{
			mingwen8.ch[i]='0';
		}
		for (i=0;i<len1;i++) 
		{
			mingwen8.ch[i]=mingwen.dat[num1*8+i];
		}
		chartobits(mingwen8,&bts2);
					bts2.totalbit=64;


		exclusiveOR(bts1,bts2,&xores);
		bitstochar(xores,&mingwen8);
		desblock(mingwen8,key,true,& outch8);
			for (j=0;j<8;j++) 
		{
			miwen.dat[num1*8+j]=outch8.ch[j];
		}
		miwen.totalchar=(num1+1)*8;
	}
		fout.open("密文.dat");//
			for (i=0;i<miwen.totalchar;i++)//
			{
				fout<<miwen.dat[i];//
			}
			fout.close();//

}
des::jiemi_cbc()
{
	chars miwen8,outch,iv;
	int i,j,num2;
	bits bts1,bts2,xores;
	ifstream fin;
	ofstream fout;
	num2=miwen.totalchar/8;
	miwen8.totalchar=8;
	key.totalchar=8;
	
	

/*	for (i=0;i<8;i++)
	{
		iv.ch[i]=m_IV.GetAt(i);
	}*/
	for (i=0;i<8;i++) {
	key.ch[i]=inkey[i];
	key.totalchar=8;
}
	for (i=0;i<8;i++) {
		iv.ch[i]=iniv[i];
		iv.totalchar=8;
	}

	chartobits(iv,&bts1);
		bts1.totalbit=64;
	

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

		for (j=0;j<8;j++)
		{
			miwen8.ch[j]=miwen.dat[i*8+j];	
		}

		desblock(miwen8,key,false,& outch);

		chartobits(outch,&bts2);

		bts2.totalbit=64;

		exclusiveOR(bts1,bts2,&xores);

		bitstochar(xores,&outch);

				

		for (j=0;j<8;j++) 
		{
			yuanwen.dat[i*8+j]=outch.ch[j];
		}
		
		chartobits(miwen8,&bts1);
			bts1.totalbit=64;
	}
	yuanwen.totalchar=num2*8;

		fout.open("原文.dat");//
	for (i=0;i<mingwen.totalchar;i++)//
	{
		fout<<yuanwen.dat[i];//
	}
	fout.close();//
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -