- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Caesar算法的
《应用密码学》课程论文
论文题目: Caesar算法
姓 名:
学 号:
专业班级:
联系电话:
2014年10月Caesar算法
算法原理
恺撒密码
方法:字母表中的每个字母用该字母后面的第三个字母进行替代,字母表是循环的。
设明文字母为p,密文字母用C代替,字母序号为1-26;
C = E(p)=(p+3)mod(26)
移位可以是任何量,通用的恺撒加密算法是:
C = E(p)=(p+k)mod(26)
K在1到25的范围取值;
恺撒解密算法为:p = D(C)=(C - k)mod(26)
算法实现
流程框图
否
是
否
是
是 否
代码
/*凯撒密码的加密和解密过程,文件输入加密文件,控制台输入加密密钥
*/
#include stdio.h
#include stdlib.h
#include conio.h
void main(){
int k,x,y,z;//k,x,y分别存储密钥,明文,密文,译文的单个值
int count;//解密时使用的循环变量
FILE*fp, *fc, *fd; //明文文件,密文文件,解密文件
//输入密钥k,加入纠错功能
printf(请输入凯撒密码的密钥(0-25,且为整数,若输入浮点数,取其整数部分) k=);
scanf(%d, k);
while(k0 || k25){
printf(输入错误,请重新输入凯撒密码的密钥(0-25,且为整数,若输入浮点数,取其整数部分) k=);
scanf(%d, k);
}
printf(密钥输入成功\n);
//从文件输入明文,并将明文转化成对应的密文,将密文写入文档
if((fp=fopen(plaintext.txt,rt))==NULL){//打开明文文件
printf(明文文件打开时出错,按任意键退出!\n);
getch();
exit(0);
}
if((fc=fopen(ciphertext.txt,wt))==NULL){//打开密文文件
printf(密文文件打开时出错,按任意键退出!\n);
getch();
exit(1);
}
x=fgetc(fp);
while(feof(fp)==0){//将明文逐个翻译成密文; feof(fp)=0表示上次没读完,所以最后结果会多读一次,解决办法是将x=fgetc(fp);加在循环之前
if(x=97x=122){
y=(x-a+k)%26+A;
fputc((char)y,fc);
}
else if(x=65x=90){
y=(x-A+k)%26+A;
fputc((char)y,fc);
}
else{
//明文中出现非法字符时忽略
}
x=fgetc(fp);
}
fclose(fp);
fclose(fc);
printf(加密成功\n);
//根据密文译出明文
if((fc=fopen(ciphertext.txt,rt))==NULL){//打开密文文件
printf(密文文件打开时出错,按任意键退出!\n);
getch();
exit(2);
}
if((fd=fopen(decode.txt,wt))==NULL){//打开译文文件
printf(译文文件打开时出错,按任意键退出!\n);
getchar();
exit(3);
}
for(count = 0; count 26; count ++){//采用强行攻击的方法译码,执行26轮译码
y=fgetc(fc);
while(feof(fc) ==0){
z=(y-A-count + 26)%26+A;
fputc((char)z,fd);
y=fgetc(fc);
}
fputc(\n\r,fd);
rewind(fc);//将文件内部的位置指针重新指向文件的开头
}
fclose(fc);
fclose(fd);
printf(解密成功,按任意键退出\n);
getch();
}
实验结果
明文文件
加密后文件
解密后文件
译码后的文件中第五行的译文是有意义的,为正确的译码,此时k = 4
算法分析
凯撒算法的加密和解密都很简单
文档评论(0)