📄 置换加密算法.cpp
字号:
// 置换加密算法.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<fstream.h>
#include<ctype.h>
#define size 256//密码本中包涵的元素个数
struct dict{
char source;//密码本文件源码字符(上行)
char secret;//密码本文件密码字符(下行)
}dia1;
char diction1[size], diction2[size];//用于存放密码本的两个数组
char ch;//当前要加密的字符
int j;//临时变量
char filename[20];//存放等待加密的外部文件名
void readdictionary() { //读密码本模块
cout<<"请将含密码本的U盘插人驱动器中,按回车键继续"<<endl;
cin.get();//起暂停作用,按键继续
ifstream dictionf("F:\\dictionary.dat",ios::in|ios::nocreate);
//打开密码本文件用于输人
dictionf.seekg(0);
dict dict2;
int m=sizeof(dict2);
int j=0;
while(dictionf.read((char * )&dict2,m))
{ j=j+1;
diction1[j]=dict2.source;//数组diction1存密码本的源码字符
diction2[j]=dict2.secret;//数组diction2存密码本的密码字符
};
dictionf.close();
cout<<"读取密码本完成,请将U盘取出妥为保管,按回车键继续!"<<endl;
cin.get();
};
void encryption(char a1[size],char a2[size])//加密模块
{ ifstream f1("F:\\123.dat");//打开要加密的文件,用于输人
if(f1.fail()){
cerr<<"要加密的文件不存在"<<endl;
exit(1);
}
ofstream f2("F:\\temp.dat");//打开存放结果的文件,用于输入
if(f2.fail()){
cerr<<"存放结果的文件不存在"<<endl;
exit(1);
}
ch=f1.get();
int j;
while (ch!=EOF)
{ j=1;
while(ch!=a1[j])j=j+1;//要加密的字符与密码本源码匹配
ch=a2[j];//如匹配,换码,将明文换成密文
f2.put(ch);
ch=f1.get();//取下一个字符
};
cout<<"文件加密成功,按回车确定"<<endl;
cin.get();
};
void decryption(char a1[size],char a2[size])//解密模块
{ ifstream f1("F:\\temp.dat");//打开要解密的文件,用于输人
if (f1.fail()){
cerr<<"要解密的文件不存在"<<endl;
exit(1);
}
ofstream f2("F:\\123.dat");//打开存放结果的文件,用于输出
if (f2.fail()){
cerr<<"存放结果的文件不存在"<<endl;
exit(1);
}
ch=f1.get();
int j;
while (ch!=EOF)
{ j=1;
while (ch!=a1[j]) j=j+1;//要解密的字符与密码本密码字符匹配
ch=a2[j];//如匹配,换码,将密文换成明文
f2.put(ch);
ch=f1.get();
};
cout<<"文件解密成功,按回车确定"<<endl;
cin.get();
};
void mimazidian()
{ fstream fout("F:\\dictionary.dat",ios::out|ios::trunc|ios::binary);
if(! fout){
cerr<<"文件mimaben.dat不存在!"<<endl;
exit(1);
}
dict x;
cout<<"请输入明文字符与密文字符的对应表形成密码本文件,按Ctrl+z键结束:"<<endl;
while (cin>>x.source){
cin>>x.secret;
fout.write((char * )&x,sizeof(x));
}
fout.close();
cout <<"输人结束并已在F盘形成密码本文件." << endl;
};
void main(){//主程序模块
readdictionary();//调用读密码本文件模块
cout<<"请按下列菜单选择功能:"<<endl;
cout<<"1--加密 2--解密 3--建立密码本 0--退出"<<endl;
cout<<"请选择(0----3):";
int i;
cin>>i;
switch(i){
case 1:
encryption(diction1,diction2);//加密
break;
case 2:
decryption(diction2,diction1);//解密
break;
case 3:
mimazidian ( ) ; //生成密码本文件
break;
case 0:
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -