作者在 2011-11-09 11:32:07 发布以下内容
/*
Name:
Copyright:
Author:
Date: 25-10-08 20:34
Description:
凯撒密码(caeser)是罗马扩张时期朱利斯o凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。
它将字母表中的字母移动一定位置而实现加密。注意26个字母循环使用,z的后面可以堪称是a。
凯撒密码的加密算法极其简单。其加密过程如下:
在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(key1,m)(其中key1为密钥),
解密变换记为D(key2,m)(key2为解密密钥)(在这里key1=key2,不妨记为key)。
凯撒密码的加密过程可记为如下一个变换:c≡m+key (mod n) (其中n为基本字符个数)
同样,解密过程可表示为:m≡c+key (mod n) (其中n为基本字符个数)
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
bool ReadFile(vector<string> & article, char * fileName);
bool WriteFile(const vector<string> & article, char * fileName);
void Encrypt(const vector<string> & proclaimedInWriting, vector<string> & cryptograph, int key);
void Decode(const vector<string> & cryptograph, vector<string> & proclaimedInWriting, int key);
int main(void)
{
vector<string> article, proclaimedInWriting, cryptograph;
int k = 3;
if (ReadFile(article, "原文.txt")) //读取文章
{
Encrypt(article, cryptograph, k); //转换为密文
}
if (WriteFile(cryptograph, "密文.txt")) //写入数据
{
for (int i=0; i<cryptograph.size(); i++)
{
cout << cryptograph[i] << endl;
}
}
cryptograph.resize(0);
if (ReadFile(cryptograph, "密文.txt")) //读取文章
{
Decode(cryptograph, proclaimedInWriting, k); //转换为明文
}
if (WriteFile(proclaimedInWriting, "明文.txt")) //写入数据
{
for (int i=0; i<proclaimedInWriting.size(); i++)
{
cout << proclaimedInWriting[i] << endl;
}
}
system("pause");
return 0;
}
//从文件中读取数据
bool ReadFile(vector<string> & article, char * fileName)
{
ifstream in(fileName);
if (!in)
{
return false;
}
string buf;
while (getline(in, buf, '\n'))
{
article.push_back(buf);
}
in.close();
return true;
}
//写数据到文件
bool WriteFile(const vector<string> & article, char * fileName)
{
ofstream out(fileName);
if (!out)
{
return false;
}
for (int i=0; i<article.size(); i++)
{
out << article[i] << endl;
}
out.close();
return true;
}
/*
函数功能:使用凯撒密码原理,对明文进行加密,返回密文
函数名:Encrypt
输入值:const vector<string> & proclaimedInWriting,存储了明文的字符串数组
vector<string> & cryptograph,用来存储密文的字符串数组
int keyey,加密密匙,正数表示后移,负数表示前移
返回值:无返回值,但是要将新的密文字符串返回
*/
void Encrypt(const vector<string> & proclaimedInWriting, vector<string> & cryptograph, int key)
{
const int MAX = 256; //字符个数
for (int i=0; i<proclaimedInWriting.size(); i++)
{
string buf;
for (int j=0; j<proclaimedInWriting[i].size(); j++)
{
buf += (proclaimedInWriting[i][j] + key) % MAX;
}
cryptograph.push_back(buf);
}
}
/*
函数功能:使用凯撒密码原理,对密文进行解密,返回明文
函数名:Decode
输入值:vector<string> & proclaimedInWriting,用来存储明文的字符串数组
const vector<string> & cryptograph,存储了密文的字符串数组
int keyey,解密密匙,正数表示前移,负数表示后移(与加密相反)
返回值:无返回值,但是要将新的明文字符串返回
*/
void Decode(const vector<string> & cryptograph, vector<string> & proclaimedInWriting, int key)
{
const int MAX = 256; //字符个数
for (int i=0; i<cryptograph.size(); i++)
{
string buf;
for (int j=0; j<cryptograph[i].size(); j++)
{
buf += (cryptograph[i][j] - key + MAX) % MAX;
}
proclaimedInWriting.push_back(buf);
}
}
Name:
Copyright:
Author:
Date: 25-10-08 20:34
Description:
凯撒密码(caeser)是罗马扩张时期朱利斯o凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。
它将字母表中的字母移动一定位置而实现加密。注意26个字母循环使用,z的后面可以堪称是a。
凯撒密码的加密算法极其简单。其加密过程如下:
在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(key1,m)(其中key1为密钥),
解密变换记为D(key2,m)(key2为解密密钥)(在这里key1=key2,不妨记为key)。
凯撒密码的加密过程可记为如下一个变换:c≡m+key (mod n) (其中n为基本字符个数)
同样,解密过程可表示为:m≡c+key (mod n) (其中n为基本字符个数)
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
bool ReadFile(vector<string> & article, char * fileName);
bool WriteFile(const vector<string> & article, char * fileName);
void Encrypt(const vector<string> & proclaimedInWriting, vector<string> & cryptograph, int key);
void Decode(const vector<string> & cryptograph, vector<string> & proclaimedInWriting, int key);
int main(void)
{
vector<string> article, proclaimedInWriting, cryptograph;
int k = 3;
if (ReadFile(article, "原文.txt")) //读取文章
{
Encrypt(article, cryptograph, k); //转换为密文
}
if (WriteFile(cryptograph, "密文.txt")) //写入数据
{
for (int i=0; i<cryptograph.size(); i++)
{
cout << cryptograph[i] << endl;
}
}
cryptograph.resize(0);
if (ReadFile(cryptograph, "密文.txt")) //读取文章
{
Decode(cryptograph, proclaimedInWriting, k); //转换为明文
}
if (WriteFile(proclaimedInWriting, "明文.txt")) //写入数据
{
for (int i=0; i<proclaimedInWriting.size(); i++)
{
cout << proclaimedInWriting[i] << endl;
}
}
system("pause");
return 0;
}
//从文件中读取数据
bool ReadFile(vector<string> & article, char * fileName)
{
ifstream in(fileName);
if (!in)
{
return false;
}
string buf;
while (getline(in, buf, '\n'))
{
article.push_back(buf);
}
in.close();
return true;
}
//写数据到文件
bool WriteFile(const vector<string> & article, char * fileName)
{
ofstream out(fileName);
if (!out)
{
return false;
}
for (int i=0; i<article.size(); i++)
{
out << article[i] << endl;
}
out.close();
return true;
}
/*
函数功能:使用凯撒密码原理,对明文进行加密,返回密文
函数名:Encrypt
输入值:const vector<string> & proclaimedInWriting,存储了明文的字符串数组
vector<string> & cryptograph,用来存储密文的字符串数组
int keyey,加密密匙,正数表示后移,负数表示前移
返回值:无返回值,但是要将新的密文字符串返回
*/
void Encrypt(const vector<string> & proclaimedInWriting, vector<string> & cryptograph, int key)
{
const int MAX = 256; //字符个数
for (int i=0; i<proclaimedInWriting.size(); i++)
{
string buf;
for (int j=0; j<proclaimedInWriting[i].size(); j++)
{
buf += (proclaimedInWriting[i][j] + key) % MAX;
}
cryptograph.push_back(buf);
}
}
/*
函数功能:使用凯撒密码原理,对密文进行解密,返回明文
函数名:Decode
输入值:vector<string> & proclaimedInWriting,用来存储明文的字符串数组
const vector<string> & cryptograph,存储了密文的字符串数组
int keyey,解密密匙,正数表示前移,负数表示后移(与加密相反)
返回值:无返回值,但是要将新的明文字符串返回
*/
void Decode(const vector<string> & cryptograph, vector<string> & proclaimedInWriting, int key)
{
const int MAX = 256; //字符个数
for (int i=0; i<cryptograph.size(); i++)
{
string buf;
for (int j=0; j<cryptograph[i].size(); j++)
{
buf += (cryptograph[i][j] - key + MAX) % MAX;
}
proclaimedInWriting.push_back(buf);
}
}