C++实现置换加密、解密
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息安全技术实验报告———置换加密、解密的C++实现
石河子大学
信息科学与技术学院
学号:2011508154
姓名:李海东
置换加密、解密的C++实现
【我的目的】编写置换加密解密算法的 C++ 实现。
【我的加密、解密思想】第一步,输入一个加密整数。
第二步,输入加密明文string_old,长度为 size。
第三步,进行加密,结果保存在 string_encrytion 中。
第四步,解密,结果保存在string_decrytion 中。
第五步,输出加密后的密文。
第六步,输出对加密前的明文和加密并解密后的密文,进行比较,判断两个数组是否一致,从而得知算法是否正确。
【我的实验】
1、置换加密、解密算法的C++实现(可以在VC6.0上运行):
#include
using namespace std;
#define MAXLENGTH 500//明文最大长度
int size = 0;//明文实际长度
char string_old[MAXLENGTH];
char string_encrytion[MAXLENGTH];
char string_decrytion[MAXLENGTH];
int uint;//保存置换长度整数
char string_low[] =
{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char string_upper[] =
{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
/////////////////////////////////////////////////////////
//加密算法
void exchange()
{
cout << " 请输入置换长度整数:";
cin >> uint;
cout << " 请输入明文字符串(由52个大小写字母组成,以#结束)" << endl;
for(int i = 0; i < MAXLENGTH; i++)
{
cin >> string_old[i];
if(string_old[i] == '#')
break;
}
size = i;
for(i = 0; i < size; i++)
{
if(string_old[i] >= 'A' && string_old[i] <= 'Z' )
{//判断是否为大写字母,对大写字母进行加密
for(int j = 0; j < 26; j++)
if(string_old[i] == string_upper[j])
{
j = j - uint;
if(j < 0)
j += 26;
string_encrytion[i] = string_upper[j];
break;
}
}
else
{
if(string_old[i] >= 'a' && string_old[i] <= 'z' )
{//对小写字母进行加密
for(int j = 0; j < 26; j++)
if(string_old[i] == string_low[j])
{
j = j - uint;
if(j < 0)
j += 26;
string_encrytion[i] = string_low[j];
break;
}
}
else
string_encrytion[i] = string_old[i];
}
}
}
////////////////////////////////////////////////////////////////
//解密算法
void unexchange()
{
for(int i = 0; i < size; i++)
{
if(string_encrytion[i] >= 'A' && string_encrytion[i] <= 'Z' )
{//对大写字母进行解密
for(int j = 0; j < 26; j++)
if(string_encrytion[i] == string_upper[j])
{
j = (j + uint) % 26;
string_decrytion[i] = string_upper[j];
break;
}
}
else
{
if(string_encrytion[i] >= 'a' && string_encrytion[i] <= 'z' )
{//对小些字母进行解密
for(int j = 0; j < 26; j++)
if(string_encrytion[i] == string_low[j])
{
j = (j + uint) % 26;