信息安全实验报告 (1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}实验截图:

加密的截图:

相关文档
最新文档