📄 main.cpp
字号:
#include <iostream>
#include <string>
#include <fstream>
#include "RSA.h"
using namespace std;
RSA_Key KEY;
int main()
{
char sel;
string filename;
unsigned char plaint;
unsigned char crypt;
unsigned int FileSize, Offset, DataSize;
char Header[HEAD_LENGTH];
int i;
KEY = RSA_Para();
while(1)
{
//----------------------选择加密或解密--------------------------
cout<<"请选择 (1)加密、(2)解密 、(3)退出:";
cin>>sel;
if(sel == '3')
return 0;
if(sel != '1' && sel != '2' && sel != '3')
{
cout<<"输入错误!"<<endl;
continue;
}
//-------------------加密(解密)文件处理-----------------------
cout<<"请输入要加密(解密)的文件名:";
cin>>filename;
ifstream file1(filename.c_str(),ios::binary);
string cyphername = filename;
if(sel == '1')
cyphername = "c_" + cyphername;
else if(sel == '2')
cyphername = "p_" + cyphername;
ofstream file2(cyphername.c_str(),ios::binary);
if(!file1 || !file2)
{
cout<<"Open File Error!"<<endl;
return -1;
}
//------------------读文件大小及头文件大小---------------
file1.seekg(2);
file1.read((char*)&FileSize ,sizeof(unsigned int)); //Get the BMP File Size
file1.seekg(sizeof(unsigned int),ios_base::cur); //Skip the Reserved Field
file1.read((char*)&Offset ,sizeof(unsigned int)); //Get the Offset of the Real Size
DataSize = FileSize - Offset; //Get the Data Size;Also can be done by "DataSize" Field in the Header
//--------------------复制文件头(格式)---------------
file1.seekg(ios::beg);
file1.read(Header,Offset);
file2.write(Header,Offset);
unsigned int m;
char a[6];
//-------------------------图象加密段------------------------------------------------------------
switch(sel) //因为n是大于等于32768的,所以采用明文x要小于它来保证算法域问题,加密出的密文是小于n的
{ //这可能达到unsigned int的大小,所以x为int, y为unsigned int。
case '1':
cout<<"正在加密,请稍后..."<<endl;
for( i=0; i<DataSize; i++)
{
plaint = file1.get();
m = Square_Multiply((unsigned int)plaint, KEY.b, KEY.n);
//file2.pword(m);
_itoa( m, a, 10 );
file2.write(a,6);
}
file1.close();
file2.close();
cout<<"加密成功!"<<" 生成"<<cyphername.c_str()<<"文件"<<endl;
break;
case '2':
cout<<"正在解密,请稍后..."<<endl;
for( i=0; i<DataSize; i++)
{
file1.read(a,6);
m = (unsigned int)atoi(a);
crypt = (unsigned char)(int)Square_Multiply(m, KEY.a, KEY.n);
file2.put(crypt);
}
file1.close();
file2.close();
cout<<"解密成功!"<<" 生成"<<cyphername.c_str()<<"文件"<<endl;
break;
case '3':
return 0;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -