密码实验报告2
更新时间:2023-10-29 22:55:01 阅读量: 综合文库 文档下载
一、实验目的
该实验为验证性实验。
通过本实验,使学生对于两种基本的古典密码编码方法(“代替”与“移位”) 产生深刻的感性认识,体验清楚二者之间的本质差异,为理解和掌握现代密码的相应知识打下良好基础。
二、实验内容
1. 设计一个周期 3 的多表代替密码并予以实现,要求:第 1 个表由密钥字法 产生(密钥字自拟),第 2 个表由洗牌法产生(注意,字母 a~z 与数字 0~25 一一对应,洗牌法即相当于实验一的方法 1(n=25)),第三个表由公式法 产生(数学公式自拟,注意它须是 Z26 上的一个一一变换)。
2. 设计一个周期 5 的 16-置换移位密码并予以实现,要求:5 个 16-置换至少 有一个是由实验一(n=15)提供的两个方法以外、自行设计的其它方法产 生。
三、实验要求
1. 上述两个古典密码的编程实现,须能对下面一段明文进行正确加密(对代 替密码,空格和标点符号保持不动;对移位密码,空格和标点符号也移位): Q is a symmetric block cipher. It is defined for a block size of 128 bits. It allows arbitrary length passwords. The design is fairly conservative. It consists of a simple substitution-permutation network. In this paper we present the cipher, its design criteria and our analysis. The design is based on both Rjindael and Serpent. It uses an 8-bit s-box from Rjindael with the linear mixing layers replaced with two Serpent style bit-slice s-boxes and a linear
permutation. The combination of methods eliminates the high level structure inherent in Rjindael while having better speed and avalanche characteristics than Serpent. Speed is improved over Serpent. This version 2.00 contains better analysis, editorial changes, and an improved key scheduling algorithm. The number of recommended rounds is also increased. 2. 抓图显示密文(附页),不能出现明显错误。
四、实验步骤
1.通过预习和老师在实验课上的讲解,理解代替密码和移位密码的本质差别,对程序的作用有初步了解;
2.分析实验指导书上所列代码,搞清楚各个子函数的功能、理清程序的大体思路; 3.将主函数与各个子函数进行合并整合,处理编译上出现的语法问题,使编译可以顺利通过;
4.完善程序,输入数据对程序的逻辑功能进行验证,测试随机数结构调用是否完整,测试结果是否符合对应的加密要求,验证打开关闭文件是否顺利。
1
五、实验体会
六、思考题
“代替表”与“置换”的不动点、逆等是否一致?
答: 不一致。代替是约定明文集合到另一集合的关系,不一定是原来的集合,而移位是在 明文集合中进行随机排列然后得到的密文。两者的不动点、逆等只有在统一集合变换时 才可能一致。
七、实验代码及运行结果
实验代码: 1. 代替密码
#include
unsigned char *full_array2(char n); /*fully_array函数产生随机数*/ int letter_to_digit(char c); char digit_to_letter(int n); unsigned char *KeyGen_s( );
void Encrypt_s(unsigned char *key);
/*主函数*/ int main() {
printf(\代替密码加密算法---------\\n\ Encrypt_s(KeyGen_s()); system(\ return 0; }
unsigned char *full_array2(char n) /*fully_array函数产生随机数*/ {
int m,i,j,k,l =0,flag; static unsigned char P[256]; start: printf(\请输入不小于%d的所有随机数个数:\\n\ scanf(\ if(m<=n)
2
{ printf(\输入数%d比%d小,须重新输入!\\n\ goto start; } srand((unsigned)time(NULL));/*初始化随机种子*/ for(i=0;i int letter_to_digit(char c) { int i; char alphabet[27]={\if(tolower(c)==alphabet[i]) return(i); return(-1); } char digit_to_letter(int n) { 3 char alphabet[27]={\if(n<0||n>25) return(0); return(alphabet[n]); } unsigned char *KeyGen_s( ) { char KeyWords[106]; char ChoiceWords[26]; unsigned char *p; static unsigned char KeyTab[26*3]; int i,j,k,l; printf(\请输入密钥字:\\n\gets(KeyWords); strcat(KeyWords,\k=0; l=strlen(KeyWords); ChoiceWords[k]=tolower(KeyWords[0]); for(i=1;i if(letter_to_digit(KeyWords[i])==-1) continue; ChoiceWords[++k]=tolower(KeyWords[i]); for(j=0;j if(ChoiceWords[j]==ChoiceWords[k]) { k--; break; } } for(i=0;i<26;i++) KeyTab[i]=(unsigned char)letter_to_digit(ChoiceWords[i]); p=full_array2(25); for(i=0;i<26;i++) KeyTab[26+i]=p[i]; for(i=0;i<26;i++) KeyTab[52+i]=(unsigned char)((7*i+3)&); return(KeyTab); } void Encrypt_s(unsigned char *key) { int i; FILE *fp; char filename[20],c; start: printf(\请输入待加密文本文件名:\\n\ 4 scanf(\ if( (fp=fopen(filename,\{ printf(\没有找到文件:%s\\n\goto start; } printf(\密文如下:\\n\i=0; while((c=fgetc(fp))!=EOF) { if(letter_to_digit(c)==-1) { putchar(c); continue; } //公式选为 7*i+3(mod 26) isupper(c)? putchar(toupper(digit_to_letter(key[(int)((i/26)*26+letter_to_digit(c))]))): \\ putchar(digit_to_letter(key[(int)((i/26)*26+letter_to_digit(c))])); i++; if(i>=26*3) i=0; } fclose(fp); } 2. 移位密码 #include /*声明子函数*/ unsigned char *full_array2(char n); int letter_to_digit(char c) ; char digit_to_letter(char n) ; unsigned char *KeyGen_p( ) ; void Encrypt_p(unsigned char *key) ; 5 /*主函数*/ int main() { printf(\移位密码加密算法---------\\n\ Encrypt_p(KeyGen_p()); system(\ return 0; } unsigned char *full_array2(char n) /*fully_array函数产生随机数*/ { int m,i,j,k,l =0,flag; static unsigned char P[256]; start: printf(\请输入不小于%d的所有随机数个数:(周期为5)\\n\ scanf(\ if(m<=n) { printf(\输入数%d比%d小,须重新输入!\\n\ goto start; } srand((unsigned)time(NULL));/*初始化随机种子*/ for(i=0;i 6 { P[l]=i; l++; } } return(P); } int letter_to_digit(char c) /*将字母转化为数字*/ { int i; char alphabet[27]={\if(tolower(c)==alphabet[i]) return(i); return(-1); } char digit_to_letter(char n)/*将数字转化为字母*/ { char alphabet[27]={\if(n<0||n>25) return(0); return(alphabet[n]); } unsigned char *KeyGen_p( )/*产生密钥*/ { unsigned char *p; static unsigned char KeyTab[16*5]; int i,j; for(i=0;i<5;i++) { p=full_array2(15); for(j=0;j<16;j++) KeyTab[16*i+j]=p[j]; } return(KeyTab); } void Encrypt_p(unsigned char *key) /*实现明文加密*/ { int i,j; FILE *fp; char filename[20],c; char d[16]; start: printf(\请输入待加密文本文件名:\\n\scanf(\ if( (fp=fopen(filename,\ 7 { printf(\没有找到文件:%s\\n\} printf(\密文如下:\\n\i=0; while((c=fgetc(fp))!=EOF) { d[i]=c; i++; if(i!=0) continue; for(j=0;j<16;j++) putchar(d[key[(int)(((i-1)/16)*16+j)]]); if(i>=16*5) i=0; } if(i!=0) { for(j=i;j<16;j++)d[j]='*'; for(j=0;j<16;j++) putchar(d[key[(int)((i/16)*16+j)]]); } putchar('\\n'); fclose(fp); } 附录:运行结果截图 8 9
正在阅读:
密码实验报告210-29
316工程体系心得教师5篇03-23
行政组织学试题及答案03-17
市三女中内部资料自然资源与自然灾害03-22
《自悼赋》《自伤赋》-班婕妤11-12
计算机网络管理填空及简答题04-12
关于浙江省监理工程师能力培训与考核的请示05-22
唠叨的奶奶作文600字02-04
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 密码
- 实验
- 报告
- 化学平衡 物理化学习题册
- 交通重大项目前期工作实践与探索
- 2013级气科统计方法实习内容
- 2015秋九年级数学上册 23.1 平均数与加权平均数同步练习(新版)冀教版
- 紫金山露天采矿实习报告 - 图文
- 2017年度宝鸡市科学技术奖专业评审通过项目
- 浙江省2015年4月自学考试报考简章 - 图文
- 第六章 方差分析
- 2018年异丁烯现状及发展趋势分析(目录)
- 计量经济学 实验报告 - 图文
- 传播学概论试题及答案
- 双管电磁流量计项目可行性研究报告(发改立项备案+2014年最新案例范文)详细编制方案
- 大学 自然地理试题含答案
- 五年级数学小数点的移动学习
- 九年级语文咏物类散文复习课导学案
- 路基路面工程复习资料
- 2006-2011年高考英语(全国卷) - 图文
- 明清时期社会经济的发展和资本主义萌芽教案
- 2018年上半年广西建筑施工C类安全员模拟试题
- 最新北师大版七年级数学上册《整式》教学设计(精品教案)