信息安全实验报告 (1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河南工业大学实验报告
实验一
古典密码-Vigenere算法
课程信息安全概论实验名称古典密码-Vigenere算法院系信息科学与工程专业班级计科1304 姓名学号
指导老师:刘宏月日期 2015.10.24
一、实验名称
古典密码-Vigenere算法
二、实验目的
1、理解简单加密算法的原理;
2、掌握Vigenere密码的原理,完成Vigenere密码加解密程序的编写;
3、通过实验,加深对古典密码体制的了解,掌握对字符进行灵活处理的方法。
三、实验内容及要求
(一)实验要求
根据Vigenere密码的原理编写程序,对输入的符号串能够根据设置的密钥分别正确实现Vigenere加密和解密功能。
(二)实验准备
1、阅读教材有关章节,理解简单加密算法的原理,掌握Vigenere密码的原理。
2、初步编制好程序。
3、准备好多组测试数据。
四、实验过程及结果
源代码:
#include"iostream"
using namespace std;
#define MINCHAR 97
#define CHARSUM 26
char table[CHARSUM][CHARSUM];
bool Init();
bool Encode(char* key, char* source, char* dest);
bool Dncode(char* key, char* source, char* dest);
int main()
{
if(!Init())
{
cout << "初始化错误!" << endl;
return 1;
}
char key[256];
char str1[256];
char str2[256];
int operation;
while(1)
{
do
{
cout << "请选择一个操作:1 加密;2. 解密;-1. 退出\n";
cin >> operation;
}while(operation != -1 && operation != 1 && operation != 2);
if(operation == -1)
return 0;
else if(operation == 1)//加密
{
cout << "请输入密钥:";
cin >> key;
cout << "请输入待加密字符串:";
cin >> str1;
Encode(key, str1, str2);
cout << "加密后的字符串:" << str2 << endl;
}
else if(operation == 2)//解密
{
cout << "请输入密钥:";
cin >> key;
cout << "请输入待解密字符串:";
cin >> str1;
Dncode(key, str1, str2);
cout << "解密后的字符串:" << str2 << endl;
}
cout << endl;
}
return 0;
}
// 初始化维吉尼亚方阵
bool Init()
{
int i, j;
for(i = 0; i < CHARSUM; i++)
{
for(j = 0; j < CHARSUM; j++)
{
table[i][j] = 65 + (i + j) % CHARSUM;
}
}
return true;
}
// 加密
// key:密钥
// source:待加密的字符串
// dest:经过加密后的字符串
bool Encode(char* key, char* source, char* dest)
{
char* tempSource = source;
char* tempKey = key;
char* tempDest = dest;
do
{
*tempDest = table[(*tempKey) - MINCHAR][(*tempSource) - MINCHAR];
tempDest++;
if(!(*(++tempKey)))
tempKey = key;
}while(*tempSource++);
dest[strlen(source)] = 0;
return true;
}
// 解密
// key:密钥
// source:待解密的字符串
// dest:经过解密后的字符串
bool Dncode(char* key, char* source, char* dest)
{
char* tempSource = source;
char* tempKey = key;
char* tempDest = dest;
char offset;
do
{
offset = (*tempSource) - (*tempKey);
offset = offset >= 0 ? offset : offset + CHARSUM;
*tempDest = MINCHAR + offset;
tempDest++;
if(!(*(++tempKey)))
tempKey = key;
}while(*++tempSource);
dest[strlen(source)] = 0;
return true;
}实验截图:
加密的截图: