- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DESD算法的调试
考查题目: DESD算法的调试
1.考核目的
考核对信息安全掌握的程度,主要通过对信息安全技术的核心技术:加密和解密进行考核。
2.考核内容
DES算法的调试;
3.考核要求
1)程序运行基本正确,能够实现加密和解密简单字符串;
2)程序可以实现对文本文件的加密和解密;
3)程序运行过程中提示信息友好,容易理解与操作;
4)程序有图像操作界面,界面美观大方;
5)程序可以实现对其他形式的文件(BMP,JPG etc.)的加密和解密。
5.参考界面
编程实现功能可参考自由软件EDKing界面编程语言不限。(VC++6.0,C++,C#,JAVA etc)Des算法的原理:
Des算法的入口参数有3个:Key,,Data和Mode。其中key为8个字节共64位,是Des算法的工作密钥。Data也为8个字节64为,是要被加密或解密的数据。Mode为Des的工作方式由两种:加密或解密。
如Mode为加密,则用key把数据Data进行加密,生成Data的密码形式(64位)作为?Des的输出结果;
若Mode为解密,则用key把密码形式的数据Data解密,还原为Data的明码形式(64位)作为Des的输出结果
2. 算法实现步骤
实现加密需要3个步骤。
第一步:变换明文。对给定的64位的明文x.,首先通过一个置换IP表来重新排列x.,从而构造出64位的x0, x0=IP(x)=L0R0,其中L0表示x0的前32位,R0表示x0的后32位。
第二步:按照规则迭代。规则为:
Li=Ri-1
Ri=Li⊕f(Ri-1, Ki) (i=1,2,3,…,16)
经过第1步变换已经得到L0和R0的值,其中符号⊕表示数学运算“异或”,f表示一种置换,由s盒置换构成,Ki是一些由密钥编排函数产生的比特块。F和Ki将在后面介绍。
第三步:对L16R16利用IP-1作逆置换,就得到了密文y0加密过程。
3.功能介绍
为了使此程序更具功能性,我在main函数中又加入了菜单功能,更具使用性,通过输入功能改变了原先只能加密固定数据的局限性,通过循环体实现了多次加密。当然还可以加以改进使加密的数据长度更长,或是有更多功能;由于时间有限,此次实验只能做到这里,日后我还会继续完善它。
DESD算法的关键源代码
// DESDemo1.cpp : Defines the entry point for the console application.
#include stdafx.h
#includemalloc.h
#includeiostream.h
#includestring.h
#includestdio.h
enum{encrypt,decrypt}; //encrypt:加密,decrypt:解密
void des_run(char out[8],char[8],bool type=encrypt);
void des_setkey(const char key[8]); //设置密钥
static void f_func(bool in[32],const bool ki[48]); //f函数
static void s_func(bool out[32],const bool in[48]); //s盒代替
static void transform(bool *out,bool *in,const char *table,int len); //变换
static void xor(bool *ina,const bool *inb,int len); //异或
static void rotatel(bool *in,int len,int loop); //循环左移
static void bytetobit(bool *out,const char *in,int bits);//字节组转换成位组
static void bittobyte(char *out,const bool *in,int bits);//位组转换成字节组
//置换IP表
const static char ip_table[64]={
58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,
61,53,45,3
文档评论(0)