密码学课程设计报告(共13页).doc
《密码学课程设计报告(共13页).doc》由会员分享,可在线阅读,更多相关《密码学课程设计报告(共13页).doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上密码学课程设计班级: 姓名: 学号: 指导教师: 2011.6专心-专注-专业目录 1.实验一 实现一个多表古典加密和解密程序1.1实验目的 掌握多表古典加密方法。1.2实验要求 能用高级语言实现古典加密方法。1.3实验内容 多表古典加密方法主要有Playfair体制、Vigenere体制、Beaufor体制、Vernam体制和Hill体制,用高级语言实现其中一种体制的加密和解密算法。1.4古典加密方法 古典加密方法分为单表加密和多表加密。古典密码编码方法有置换,代替,加法 。把明文中的字母重新排列,字母本身不变,但其位置改变了,这样编成的密码称为置换密码。最简单的置
2、换密码是把明文中的字母顺序倒过来,然后截成固定长度的字母组作为密文。 乘积和迭代是多种加密方法混合使用,对一个加密函数多次迭代。 单表代替密码的安全性不高,一个原因是一个明文字母只由一个密文字母代替。构造多个密文字母表,在密钥的控制下用相应密文字母表中的一个字母来代替明文字母表中的一个字母。一个明文字母有多种代替。 Vigenere密码是著名的多表代替密码。 所以本次试验我选择做的就是 Vigenere密码。 1.5 程序代码#include#include#include#define MAX_LEN 1024 #define LETTERS 26 void encrypt_vigenere
3、(char* plain, char* key, char* cipher) int max = strlen(plain)-1, d = strlen(key)-1, i; for(i=0;imax;i+) cipheri = a+(plaini -a + keyi % d - a+ LETTERS) % LETTERS; /adding LETTERS to avoid the result is negative cipheri = 0;void decrypt_vigenere(char* cipher, char* key, char* plain) int max = strlen
4、(cipher), d = strlen(key)-1, i; for(i=0;i Please input the key: n); fgets(key,sizeof(key),stdin); printf(n- Please input the plain text: n); fgets(plain,sizeof(plain),stdin); encrypt_vigenere(plain,key,cipher); printf(n- The cipher text is : n); printf(%sn,cipher); decrypt_vigenere(cipher, key, plai
5、n); printf(n-The original message is: n); printf(%sn,plain);1.6 结果分析首先在程序执行时的提示下,输入密钥,接下来输入要加密明文,程序执行,可以产生加密后的密文,并自动解密出原来的明文。顺利执行加密和解密过程。1.7 实验总结古典多表密码有多种体质,这次试验我选择的是Vigenere体制。经过对加密算法的实现,我对古典加密算法的模式,过程和原理有了更深入的了解。多表古典密码通过构造多个对应明文的密文字母表,在密钥的控制下使用相应的密文字母表中的某个字母来代替明文字母表中的一个字母。达到隐藏明文的目的。解密的时候对这个过程进行逆操作
6、,得到明文。一个明文字母有多种代替。而 Vigenere密码就是著名的多表代替密码。而且通过编码,又练习了我C+操作的水平。2.实验二 DES算法的实现2.1实验目的 握分组加密算法的设计与实现方法。2.2实验要求 用高级语言实现实现DES加密和解密算法。2.3实验内容 DES是由初始变换、乘积变换和逆初始变换构成,乘积变换是DES算法的核心。首先用代码实现这几个变换,然后组合成DES加密算法。由于DES解密算法与加密算法相同只是子密钥使用次序不同,因此可简单地由加密算法实现解密算法。2.4 DES对称加密算法 对称加密算法有时又叫做传统密码算法,加密密钥可以从解密密钥中推导出来,解密密钥也可
7、以从加密密钥中推导出来。在大多数的对称算法中,加密密钥和解密密钥是相同的,因此也成为秘密密钥算法或者单密钥算法。它要求发送发和接收方在安全通信之前先商定一个密钥。对称算法的安全性依赖于密钥,所以密钥的保密性对通信至关重要。对称加密算法主要有分组加密和流加密两类。分组加密是指将明文分成固定商都的组,用同一密钥分别对每一组加密,输出固定长度的密文,典型代表:DES、3DES、IDEA。DES的加密流程:DES的加密过程可分为加密处理,加密变换和子密钥生成几个部分组成。 1.加密处理过程 (1)初始变换。加密处理首先要对64位的明文按表1所示的初始换位表IP进行变换。表中的数值表示输入位被置换后的新
8、位置。例如输入的第58位,在输出的时候被置换到第1位;输入的是第7位,在输出时被置换到第64位。(2)加密处理。上述换位处理的输出,中间要经过16轮加密变换。初始换位的64位的输出作为下一次的输入,将64位分为左、右两个32位,分别记为L0和R0,从L0、R0到L16、R16,共进行16轮加密变换。其中,经过n轮处理后的点左右32位分别为Ln和Rn,则可做如下定义: Ln=Rn-1 Rn=Ln-1 其中,kn是向第n轮输入的48位的子密钥,Ln-1和Rn-1分别是第n-1轮的输出,f是Mangler函数。 (3)最后换位。进行16轮的加密变换之后,将L16和R16合成64位的数据,再按照表2所
9、示的最后换位表进行IP-1的换位,得到64位的密文,这就是DES算法加密的结果。2.加密变换过程 通过重复某些位将32位的右半部分按照扩展表3扩展换位表扩展为48位,而56位的密钥先移位然后通过选择其中的某些位减少至48位,48位的右半部分通过异或操作和48位的密钥结合,并分成6位的8个分组,通过8个S-盒将这48位替代成新的32位数据,再将其置换一次。这些S-盒输入6位,输出4位。3.子密钥生成过程 钥通常表示为64位的自然数,首先通过压缩换位PC-1去掉每个字节的第8位,用作奇偶校验,因此,密钥去掉第8、16、2464位减至56位,所以实际密钥长度为56位,而每轮要生成48位的子密钥。 4
10、.解密处理过程 从密文到明文的解密过程可采用与加密完全相同的算法。不过解密要用加密的逆变换,就是把上面的最后换位表和初始换位表完全倒过来变换。这里不再赘述。2.5 程序代码由于代码过长,此处只列出部分关键代码。void CDES:EncryptKey(char *key) printf(n原始密钥: %s,key); m_dwlKey=ProcessByte(unsigned char*)key,TRUE);/ PrintBit(m_dwlKey); m_dwlKey=PermuteTable(m_dwlKey,dwlKey_PC_1,56);/ PrintBit(m_dwlKey); Gen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 密码学 课程设计 报告 13
限制150内