网站大量收购独家精品文档,联系QQ:2885784924

实验一数据加密算法-Read.doc

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

PAGE 实验一 数据加密算法 一、实验目的 通过本实验的学习,深刻理解DES加密标准,提高算法设计能力,为今后继续学习密码技术和数字签名奠定基础。 二、实验内容 根据DES加密标准,用C++设计编写符合DES算法思想的加、解密程序,能够实现对字符串和数组的加密和解密。 三、实验步骤 1. 在操作系统环境下启动VC++集成环境(Microsoft Visual C++ 6.0 ,其中6.0为版本号,也可为其它版本),则产生如图1所示界面。 图1 VC++ 集成环境界面 2. 选择“文件”菜单下的“新建”命令,出现如图2所示界面(不可直接按“新建”按钮,此按钮是新建一个文本文件)。此界面缺省标签是要为新程序设定工程项目,但编辑小的源程序也可以不建立项目,可以直接选择其左上角的“文件”标签,产生如图3所示界面。 3. 在图3所示的界面中左边选定文件类型为“C++ Source File”,右边填好文件名并选定文件存放目录,然后单击“确定”按钮,出现如图4所示编程界面,开始输入程序。 4. 输入完源程序后,按编译菜单下的编译命令,对源程序进行编译。系统将在下方 的窗口中显示编译信息。如果无此窗口,可按Alt + 2键或执行查看菜单下的输出命令。 如果编译后已无提示错误,则可按编译菜单下的构件命令来生成相应的可执行文件,随后可按编译菜单下的执行命令运行的程序。 图2 新建VC++工程项目界面 图3 新建VC++源程序文件界面 图4 VC++源程序编辑界面 DES算法的过程 1. 处理密钥: 1.1 从用户处获得64位密钥Key。(每第8位为校验位,为使密钥有正确的奇偶校验,每个字节要有奇数个“1”位。 1.2 处理过程: 1.2.1 对密钥实施变换,经过子密钥换位表PC-1的变换后,Key 的位数由64 位变成了56位。 1.2.2 把变换后的密钥等分成两部分,前28位记为C0,后28位记为D0。 1.2.3 计算子密钥(共16个), 从i=1开始。 1.2.3.1 分别对Ci-1、Di-1作循环左移来生成Ci、Di(共16次)。 1.2.3.2 串联Ci、Di,得到一个56位数,然后对此数作子密钥换位表PC-2变换以产生48位子密钥Ki 。 1.2.3.3 按以上方法计算出16个子密钥。 2.对64位数据块的处理: 2.1 把数据分成64位的数据块,不够64位的以适当方式填补。 2.2 对数据块利用初始变换IP表作变换。 2.3 将变换后的数据块等分成前后两部分,前32位记为L0,后32位记为R0。 2.4 用16个子密钥对数据加密。 2.4.1 利用扩展置换E,将32位R(i-1)数据扩展成48位。 2.4.2 用E{R (i-1)}与子密钥K(i)作按位异或运算。 2.4.3 把所得的48位数分成8个6位数组。1-6位为Z1,7-12位为Z2,……43-48位为Z8。 2.4.4 从j=1开始,用S盒里的值替换Zj。S盒里的值为4位数,共8个S盒,输出32位数。 2.4.4.1 取出Z j的第1和第6位串联起来成一个2位数,记为m。m即是Sj盒里用来替换Z j的数所在的行数。 2.4.4.2 取出Z j的第2至第5位串联起来成一个4位数,记为n。n即是Sj盒里用来替换Z j的数所在的列数。2.4.4.3 用坐标(m,n)在S盒中查找出相应的值作为S盒的输出。 2.4.5 八个选择函数Sj(1≤j≤8)的输出拼接为32位二进制数据,把它作为P盒置换的输入,得到输出 2.4.6 把得到的结果与L(i-1)作异或运算。把计算结果賦给R(i)。 2.4.7 把R(i-1)的值賦给L(i),完成1轮乘积变换。 2.4.8 从2.4.1起循环执行16次,直到K(16)也被用到。 2.5 把R(16)和L(16) 顺序串联起来得到一个64位数。对这个数实施2.2变换的逆变换IP-1。 五.算法实现 (1)源程序: #ifndef _DES_ENCRYPT_DECRYPT #define _DES_ENCRYPT_DECRYPT #define BYTE unsigned char #define LPBYTE BYTE* #define LPCBYTE const BYTE* #define BOOL int class DES { public: BOOL CDesEnter(LPCBYTE in, LPBYTE out, int datalen, const BYTE key[8], BOOL type); BOOL CDesMac(LPCBYTE mac_data, LPBYTE mac_code, int datalen, const BYT

文档评论(0)

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

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

1亿VIP精品文档

相关文档