凯撒密码实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
凯撒密码实验
一、实验目的
通过实验熟练掌握凯撒密码算法,学会凯撒密码算法程序设计。
二、实验环境
软件工具:Visual C++ 6.0
操作系统:windows xp
三、实验思想
在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含2个相同的元素。
密钥和协议(算法)。
凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。
置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。
凯撒密码的加密算法极其简单。
其加密过程如下:
在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里不妨假设k1=k2,记为k)。
凯撒密码的加密过程可记为如下一个变换:
c?m+k mod n (其中n为基本字符个数) 同样,解密过程可表示为:
m?c+k mod n (其中n为基本字符个数) 四、实验数据(源代码)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void table(char *keyword) //筛选密钥(去重复去空格)
{
int i,j,k;
for(i=0;*(keyword+i)!='\0';i++)
{
for(j=i;*(keyword+j)!='\0';j++)
{
if(i!=j)
if(*(keyword+i)==*(keyword+j)||*(keyword+j)==' ') {
for(k=j;*(keyword+k)!='\0';k++)
*(keyword+k)=*(keyword+k+1);
j--;
}
}
}
}
void newTab(char *keyword) //生成密钥表
{
char ch;
int i;
int t;
for(t=0;*(keyword+t)!='\0';t++);
for(ch='a';ch<='z';ch++)
{
for(i=0;*(keyword+i)!=ch;i++)
{
if(*(keyword+i)=='\0')
{
*(keyword+t)=ch;
t++;
break;
}
}
}
*(keyword+t)='\0';
}
char *Ciphertext(char *keyword,char *Plaintext) //按密码表加密 { char ch;
int i,j;
for(i=0;*(Plaintext+i)!='\0';i++)
{
for(ch='a',j=0;ch<='z';ch++,j++)
{
if(*(Plaintext+i)==ch)
{
*(Plaintext+i)=*(keyword+j);
break;
}
}
}
return Plaintext;
}
char *Decrypt(char *keyword,char *Plaintext) //解密 { char ch;
int i,j;
for(i=0;*(Plaintext+i)!='\0';i++)
{
for(ch='a',j=0;*(keyword+j)!='\0';ch++,j++)
{
if(*(Plaintext+i)==*(keyword+j))
{
*(Plaintext+i)=ch;
break;
}
}
}
return Plaintext;
}
void main()
{
char *keyword,*Plaintext,*tmp=NULL;
keyword=(char*)malloc(sizeof(char));
Plaintext=(char*)malloc(sizeof(char));
printf("Input key word:"); //输入欲用密钥
gets(keyword);
printf("Input Plaintext:"); //输入要转换的明文
gets(Plaintext);
table(keyword); //去空格去重复
newTab(keyword); //生成密码表
tmp=Ciphertext(keyword,Plaintext); //对应着密码表生成密文
puts(tmp); //输出密文
puts(Decrypt(keyword,tmp)); //解密输出
}
五、实验心得
通过本次实验,将凯撒密码算法的理论应用到实践中来,利用C++编程实现了凯撒密码算法的加密过程,将理论与实践结合起来,加深了课本上凯撒密码算法理论的理解。