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

📄 main.cpp

📁 本程序实现了用RSA加密算法加密、解密图片。本程序仅作为RSA原理理解
💻 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 + -