试验二基于对称密钥算法的加解密工具的实现.DOC

试验二基于对称密钥算法的加解密工具的实现.DOC

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
试验二基于对称密钥算法的加解密工具的实现

实验二 基于对称密钥算法的加解密工具的实现 在众多的密码学系统中,对称密钥分组密码是最突出和最重要的成员。 一、实验目的 熟悉流密码DES算法。通过运用高级程序设计语言,编程实现DES算法,加深对对称密钥分组密码算法设计思想的理解。 二、实验原理 1. DES算法的加密和解密 一个分组密码可以看成是一个函数,它将n比特的明文组映射成n比特的密文组;n被称作分组长度。使用相同长度的明文组和密文组是为了避免数据扩张。数据加密标准DES基于一个称为Feistel网络的结构。DES的每密文比特是所有明文比特和所有密钥比特的复合函数。这一特性使明文与密文之间,以及密钥与密文之间不存在统计相关性,因而使得DES具有很高的抗攻击性。DES算法:使用56密钥对64的数据块进行加密,并对64的数据块进行16轮乘积变换。在每轮乘积变换时,一个48的每轮密钥值由56的完整密钥得出。总体方案如所示。与其他任何一种加密方案一样,加密函数有两个输入:待加密的明文和密钥。…,m64),置换后的64比特结果c = (c1,c2,c3,…,c64),使得IP(m)= c,或者IP-1(c)= m。则c1 = m58, c2 = m50,…, c64 = m7。置换规则如表2-1所示。 图2-1 DES加密算法总体方案DES的密钥产生过程如图2-2所示。DES的密钥有64比特,其中每个字节的第8位作为奇偶校验。密钥选择置换表用于去除64比特密钥中的奇偶校验位,形成56比特的选择矩阵。在DES的16轮乘积变换中,每一轮都将一个56比特的密钥分成左右各28比特的两部分,根据轮数循环左移后,由密钥压缩置换表PC-2将56比特密钥压缩成48比特密钥。 图2-2 DES密钥产生过程 密钥选择置换表(PC-1)和密钥压缩置换表(PC-2)分别如表2-2和表2-3所示: 表2-2 密钥密钥 (4) S盒替代 压缩后的密钥与扩展分组异或后,将48比特的结果送入8个替代盒(S-盒)完成替代运算。每一个S-盒都有6比特输入,4比特输出。48比特的输入被分成8个6比特分组,每一分组对应一个S-盒替代操作。例如:分组1由S-盒1操作,分组2由S-盒2操作,…,分组8由S-盒8操作。每个6位分组中间4位确定S-盒的列数,两边2位确定行数。8个S-盒如表2-5所示: 表2-5 八个S盒 和任何的Feistel密码一样,DES解密使用与加密相同的算法,子密钥的使用次序。循环左移操作 三、实验环境 操作系统:Windows 2000/XP/2003或以上版本。 应用软件:VC++ 6.0或以上版本。 实验软件包:DES工程。 四、实验内容和任务 在掌握DES算法的基础上,运用高级程序设计语言实现DES算法,掌握置换、代换的高级程序设计语言的实现方法,并通过具体运算测试函数的功能。表2-6给出DES算法的函数接口定义,作为编程实现参考。 表2-6 实现DES算法的函数接口定义 函数 void Transform(boolean * Out,boolean * In,char * Table, int len) 功能 置换函数,按照Table所给置换表对In中二进制的序列进行置换,结果保存在Out中。 输入 In(待置换的二进制序列),Table(置换表),len(置换的长度) 输出 Out(置换后的二进制序列) 函数 void S_Fun(boolean[] out,boolean[] in) 功能 S-盒代换函数,将48位二进制输入代换成32位输出 输入 in(48位二进制数据) 输出 out(32位二进制数据)) 函数 void F_Func(boolean[] in, boolean[] ki) 功能 乘积变换函数,在子密钥的作用下32位数据经过扩展置换变换为48位数据,然后经过S-盒代换和P-盒置换转换为32位数据。 输入 in(32位二进制数据), ki(第i轮的48位子密钥) 输出 in(32位二进制数据) 函数 void SetSubKey(bool SubKey[2][16][48], byte[] key) 功能 产生子密钥函数,根据初始密钥key生成16个子密钥存储在全局变量SubKey[16][48]中 输入 key(初始密钥) 输出 SubKey(16个子密钥) 函数 void DES(byte[] out,byte[] in,byte[] key,int type) 功能 DES加解密函数,在密钥key的作用下加密或解密 输入 in(明文或密文), key(密钥), type(ENCRYPT 加密,DECRYPT 解密) 输出 out(密文或明文) DES加解密工具的界面实例如图-5所示。输入明文和种子密钥,点击加密按钮,

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档