好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

现代密码学古典密码算法实验报告.doc

37页
  • 卖家[上传人]:pu****.1
  • 文档编号:472965503
  • 上传时间:2023-03-23
  • 文档格式:DOC
  • 文档大小:131.50KB
  • / 37 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 课程名称 现代密码学实验 实验工程名称 古典密码算法练习一 Caesar密码【实验目的】●理解代替密码学加密过程【实验人数】每组2人【系统环境】Windows【网络环境】交换网络构造【实验工具】VC++6.0密码工具【实验类型】验证型【实验原理】一.Caesar〔恺撒〕密码Caesar密码是传统的代替加密法,当没有发生加密〔即没有发生移位〕之前,其置换表如表1所示表1 Caesar置换表abcdefghijklmABCDEFGHIJKLMnopqrstuvw*yzNOPQRSTUVW*YZ加密时每一个字母向前推移k位,例如当k=5时,置换表如表2所示表2 Caesar置换表abcdefghijklmFGHIJKLMNOPQRnopqrstuvw*yzSTUVW*YZABCDE于是对于明文:datasecurityhasevolvedrapidly经过加密后就可以得到密文:IFYF*JHZWNYDMF*JATQAJIWFUNIQD假设令26个字母分别对应整数0~25,如表3所示表3 Caesar置换表abcdefghijklm0123456789101112nopqrstuvw*yz13141516171819202122232425则Caesar加密变换实际上是: c=(m+k)mod26其中m是明文对应的数据,c是与明文对应的密文数据,k是加密用的参数,也称为密钥。

      很容易得到相应的Caesar解密变换是: m=D(c)=(c–k)mod26例如明文:datasecurity对应的数据序列: 4当k=5时经过加密变换得到密文序列: 3对应的密文为:IFYF*JHZWNYD【实验步骤】本练习主机A、B为一组,C、D为一组,E、F为一组首先使用"快照*〞恢复Windows系统环境一.手动完成Caesar密码(1) 在实验原理局部我们已经了解了Caesar密码的根本原理,则请同学们写出当密钥k=3时,对应明文:data security has evolved rapidly的密文: GDWD VHF*ULWB KDV HYROYHG UDSLGOB 2) 进入实验平台,单击工具栏中的"密码工具〞按钮,启动密码工具,在向导区点击"Caesar密码〞在明文输入区输入明文:data security has evolved rapidly将密钥k调节到3,查看相应的密文,并与你手动加密的密文进展比较请根据密钥验证密文与明文对应关系是否正确二.Caesar加密(1) 进入"加密解密〞|"Caesar密码〞视图,在明文输入区输入明文〔明文应为英文〕,单击"加密〞按钮进展加密。

      请将明文记录在这里: i love information security 2) 调节密钥k的微调按钮或者对照表的移位按钮,选择适宜的密钥k值,并记下该密钥k值用于同组主机的解密加密工作完成后,单击"导出〞按钮将密文默认导出到Caesar共享文件夹(D:\Work\Encryption\Caesar\)中,默认文件名为Caesar密文.t*t选择了k=5.加密过程:(3) 通知同组主机接收密文,并将密钥k通告给同组主机4) 单击"导入〞按钮,进入同组主机Work\Encryption\Caesar目录〔在"开场|运行〞中输入\\同组主机IP\Work\Encryption\Caesar〕,翻开Caesar密文.t*t我作为传送方,导出过程:(5) 调节密钥k的微调按钮或对照表的移位按钮,将k设为同组主机加密时的密钥k值,这时解密已经成功请将明文写出: i love information security 6) 将解密后的明文与同组主机记录的明文比较,请比照明文是否一样结果一样三.Caesar密码分析(1) 本机进入"密码工具〞|"加密解密〞|"Caesar密码〞,在明文输入区输入明文〔要求明文有一定的意义以便让同组主机分析〕。

      请将明文记录在这里: i love *ian dai mi ma *ue 2) 调节密钥k的微调按钮或者对照表的移位按钮,选择适宜的密钥k值完成Caesar加密,单击"导出〞按钮,将密文默认导出到Caesar共享文件夹中选择k=4,加密过程如下:作为传送方,导出过程如下,此处命名为Caesar密文1:(3) 通告同组主机〔不要通告密钥值k〕密文已经放在共享文件夹中,让同组主机获取密文4) 单击"导入〞按钮将同组主机Caesar密文导入5) 调节密钥k的微调按钮或者对照表的移位按钮来调节密钥,从而进展密码分析〔平均13次,最坏26次破解〕请将破解出的明文和密钥记录在这里:密钥k=___4___明文 i love *ian dai mi ma *ue 6) 将破解后的密钥和明文与同组主机记录的密钥和明文比较如果不同请调节密钥k继续破解结果一样〔7〕加密解密过程分析:凯撒加密过程相对简单,仅需将相应的字母往后移key位,超出局部循环至起始位例如i,key=4,即将i往后移4位,为M解密过程直接做反向操作即可四.源码应用〔选做〕设计Caesar加密工具,利用Caesar加密算法对文件进展加密。

      单击工具栏"Caesar加密工具工程〞按钮基于此工程进展程序设计1) 源码/******************************************************************************/// 工程:Caesar// 功能:Caesar加、解密文件// jlcss|E*pNIS/******************************************************************************/*include*include*include*include"Caesar.h"*defineCHAR_SIZE 26*defineDECRYPT_FILE"Caesar密文.t*t"*defineENCRYPT_FILE"Caesar明文.t*t"/******************************************************************************/// 名称:Caesar_encrypt// 功能:Caesar加密// 参数:k:密钥; m:明文; c:加密后的密文// 返回:无// 备注:Caesar加密变换: c = (m + k) mod 26/******************************************************************************/void Caesar_encrypt(intk, char* m, unsignedintmLen, char* c){unsignedint i = 0;for (i = 0; i < mLen; i++) {if (m[i] >= 'a' && m[i] <= 'z' - k) {c[i] = (m[i] - 'a') + ('A' + k); }elseif (m[i] >= 'a' && m[i] > 'z' - k) {c[i] = (m[i] - 'z' - 1) + ('A' + k); }elseif (m[i] >= 'A' + k && m[i] <= 'Z') {c[i] = (m[i] - 'A' - k) + 'a'; }elseif (m[i] >= 'A' && m[i] < 'A' + k) {c[i] = (m[i] - 'A') + ('z' + 1 - k); }else {c[i] = m[i]; } }c[i] = '\0';}/******************************************************************************/// Caesar_decrypt// 功能:Caesar解密// 参数:k:密钥; c:密文; m:解密后的明文// 返回:更新成功返回true,否则返回false// 备注:Caesar解密变换: m = (c – k) mod 26/******************************************************************************/void Caesar_decrypt(intk, char* c, unsignedintcLen, char* m){unsignedint i = 0;for (i = 0; i < cLen; i++) {if (c[i] >= 'A' + k&& c[i] <= 'Z') {m[i] = (c[i] - 'A' - k) + 'a'; }elseif (c[i] >= 'A' && c[i] < 'A' + k) {m[i] = (c[i] - 'A') + ('z' + 1 - k); }elseif (c[i] >= 'a' && c[i] <= 'z' - k) {m[i] = (c[i] - 'a') + ('A' + k); }elseif (c[i] > 'z' - k && c[i] <= 'z') {m[i] = (c[i] + k - 'z' - 1) + 'A'; }elsem[i] = c[i]; }m[i] = '\0';}/******************************************************************************/// 名称:usage// 功能:帮助信息// 参数:应用程序名称// 返回:提示信息/******************************************************************************/void Usage(constchar* appname){ printf("\n\tusage: caesar -e 明文文件 密钥k\n"); printf("\tusage: caesar -d 密文文件 密钥k\n");}。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.