欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    密码学课程设计实验报告.doc

    • 资源ID:5021695       资源大小:224.50KB        全文页数:13页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    密码学课程设计实验报告.doc

    华中科技大学信息安全专业华中科技大学密码学课程设计实验报告 院 系:计算机科学与技术专 业: 信息安全 班 级: 0803 指导老师: 姓 名: 学 号: u200814139 2011年2月27日目录密码学课程设计报告31. 引论32.DES31.1原理31.2DES的实现91.3相关函数93.弱密钥的检测112.1定义112.2检测方法112.3检测弱密钥实现112.4相关函数124.总结125.相关源码12一、引论当今社会是信息化的社会。为了适应社会对计算机数据安全保密越来越高的要求,美国国家标准局(NBS)于1997年公布了一个由IBM公司研制的一种加密算法,并且确定为非机要部门使用的数据加密标准,简称DES(Data Encrypton Standard)。自公布之日起,DES算法作为国际上商用保密通信和计算机通信的最常用算法,一直活跃在国际保密通信的舞台上,扮演了十分突出的角色。二、DES2.1、原理2.1.1、DES算法加密过程对DES算法加密过程图示的说明如下:待加密的64比特明文串m,经过IP置换后,得到的比特串的下标列表如下:IP58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157该比特串被分为32位的L0和32位的R0两部分。R0子密钥K1(子密钥的生成将在后面讲)经过变换f(R0,K1)(f变换将在下面讲)输出32位的比特串f1,f1与L0做不进位的二进制加法运算。运算规则为:f1与L0做不进位的二进制加法运算后的结果赋给R1,R0则原封不动的赋给L1。L1与R0又做与以上完全相同的运算,生成L2,R2 一共经过16次运算。最后生成R16和L16。其中R16为L15与f(R15,K16)做不进位二进制加法运算的结果,L16是R15的直接赋值。R16与L16合并成64位的比特串。值得注意的是R16一定要排在L16前面。R16与L16合并后成的比特串,经过置换IP-1后所得比特串的下标列表如下:IP-140848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725经过置换IP-1后生成的比特串就是密文e.。下面再讲一下变换f(Ri-1,Ki)。它的功能是将32比特的输入再转化为32比特的输出。其过程如图所示:对f变换说明如下:输入Ri-1(32比特)经过变换E后,膨胀为48比特。膨胀后的比特串的下标列表如下:E:32123454567898910111213121314151617161718192021202122232425242526272829282930313231膨胀后的比特串分为8组,每组6比特。各组经过各自的S盒后,又变为4比特(具体过程见后),合并后又成为32比特。该32比特经过P变换后,其下标列表如下:P:1672021291228171152326518311028241432273919133062211425经过P变换后输出的比特串才是32比特的f (Ri-1,Ki)。下面再讲一下S盒的变换过程。任取一S盒。见图:在其输入b1,b2,b3,b4,b5,b6中,计算出x=b1*2+b6, y=b5+b4*2+b3*4+b2*8,再从Si表中查出x 行,y 列的值Sxy。将Sxy化为二进制,即得Si盒的输出。2.1.2、子密钥的生成64比特的密钥生成16个48比特的子密钥。其生成过程见图:子密钥生成过程具体解释如下:64比特的密钥K,经过PC-1后,生成56比特的串。其下标如表所示:PC-157494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729211352820124该比特串分为长度相等的比特串C0和D0。然后C0和D0分别循环左移1位,得到C1和D1。C1和D1合并起来生成C1D1。C1D1经过PC-2变换后即生成48比特的K1。K1的下标列表为:PC-21417112415328156211023191242681672720132415231374755304051453348444939563453464250362932C1、D1分别循环左移LS2位,再合并,经过PC-2,生成子密钥K2依次类推直至生成子密钥K16。注意:Lsi (I =1,2,.16)的数值是不同的。具体见下表:迭代顺序12345678910111213141516左移位数11222222122222212.1.3、解密:DES的解密过程和DES的加密过程完全类似,只不过将16圈的子密钥序列K1,K2K16的顺序倒过来。即第一圈用第16个子密钥K16,第二圈用K15,其余类推。第一圈:加密后的结果L=R15, R=L15f(R15,K16)f(R15,K16)=L15同理R15=L14f(R14,K15), L15=R14。同理类推:得 L=R0, R=L0。其程序源代码与加密相同。2.2、DES的实现2.2.1开发环境主机:Microsoft Windows XP Professional 版本2002 ServicePack3Pentium(R) Dual-Core CPU T4500 2.30GHz 2.29GHz, 1.92GB的内存编程工具:Visual C+ 6.0 MFC2.2.2、功能介绍左端“加密” :输入明文和密钥,输出加密密文左端“解密” :输入密文和密钥,输出解密明文中间有 新建、检测弱密钥、加密、解密按钮:实现所述功能如图:2.2.3、功能测试输入明文文件,加密得到乱码,解密还原为明文如图:2.3、相关函数1. void Des_SetKey(const char Key8);/功能:产生子密钥/Key:密钥2. void Des_Run(char Out8, char In8, bool Type);/功能:加解密/Out8:存放加(解)密后的密(明)文/Int8:存放需要加(解)密的明(密)文/Tpye:type为1的时候是加密,type为0的时候是解密3.void RotateL(bool *In, int len, int loop);/ 循环左移/ In:输入兼输出/ len:长度/ loop:循环位数4. void F_func(bool In32, const bool Ki48);/ f 函数/ In:输入兼输出/ Ki:子密钥5.void S_func(bool Out32, const bool In48);/ S盒代替/Out:输出/ In:输入6. void Transform(bool *Out, bool *In, const char *Table, int len);/ 各种Table变换/ Out:输出/In:输入/Table:变换表/len:长度7. void Xor(bool *InA, const bool *InB, int len); / 异或8.void ByteToBit(bool *Out, const char *In, int bits);/ 字节组转换成位组9.void BitToByte(char *Out, const bool *In, int bits);/ 位组转换成字节组二、弱密钥的检测2.1定义对于一个外部密钥,若产生的16个内部密钥都相同,则称此外部密钥为弱密钥2.2检测方法检测16个内部密钥是否完全相同,若完全相同则判断为弱密钥,否则为正常密钥.2.3检测弱密钥实现2.3.1、开发环境略。2.3.2功能介绍测弱密钥按钮,单击检测弱密钥,弹出对话框显示判断结果2.3.3、功能测试输入密码为54534543,检测为非弱密钥,可用输入密码为00000000,检测为弱密钥,不可用2.4相关函数bool CheckKey(const char* Key, int len);/检测是否为弱密钥/Key:输入密钥/len:密钥长度四、总结通过本次课程设计,我对密码学原理有了更深入的理解,在编程的过程当中,也遇到了很多问题, 总之,通过此次课设,在编程的过程中遇到了很多问题,通过反复的分析与调试,将他们一一解决,锻炼了自己的分析问题和解决问题的能力,同事,通过实际编写密码分析程序,也极大地激发了我对密码学的兴趣,希望在以后的学习中不断地积累和丰富密码学的相关理论知识。13

    注意事项

    本文(密码学课程设计实验报告.doc)为本站会员(韩长文)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开