📄 etext.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 + -