密码学课程设计实验报告.doc_第1页
密码学课程设计实验报告.doc_第2页
密码学课程设计实验报告.doc_第3页
密码学课程设计实验报告.doc_第4页
密码学课程设计实验报告.doc_第5页
免费预览已结束,剩余8页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华中科技大学信息安全专业华中科技大学密码学课程设计实验报告 院 系:计算机科学与技术专 业: 信息安全 班 级: 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:输入密钥

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论