信息安全技术DES加密算法Word文档格式.docx

上传人:b****6 文档编号:17585403 上传时间:2022-12-07 格式:DOCX 页数:18 大小:18.23KB
下载 相关 举报
信息安全技术DES加密算法Word文档格式.docx_第1页
第1页 / 共18页
信息安全技术DES加密算法Word文档格式.docx_第2页
第2页 / 共18页
信息安全技术DES加密算法Word文档格式.docx_第3页
第3页 / 共18页
信息安全技术DES加密算法Word文档格式.docx_第4页
第4页 / 共18页
信息安全技术DES加密算法Word文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

信息安全技术DES加密算法Word文档格式.docx

《信息安全技术DES加密算法Word文档格式.docx》由会员分享,可在线阅读,更多相关《信息安全技术DES加密算法Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

信息安全技术DES加密算法Word文档格式.docx

des.h"

intmain(intargc,char*argv[])

BYTEdata[64];

BYTEkey[64];

intlen;

inti;

memset(data,0,sizeof(data));

memset(key,0,sizeof(key));

printf("

Pleaseinputastring:

\n"

);

gets(data);

len=strlen(data);

Pleaseinputakey:

gets(key);

Originaldata:

%s\n"

data);

des(data,key,len);

Encrypteddata:

"

for(i=0;

i<

len;

i++)

printf("

%02X"

data[i]);

Ddes(data,key,len);

Decrypteddata:

\nPressEntertoexit...\n"

getchar();

return0;

system("

PAUSE"

}

第三个文件des.c

/*DES加密解密函数库

*

*本算法根据以下文章内容整理:

*DES算法的介绍和实现(上)

*DES算法的介绍和实现(下)

*EricWei,2007-4-5

*/

ULONG32g_outkey[16][2]={0};

/*输出的key*/

ULONG32g_bufkey[2]={0};

/*形成起始密钥*/

/*实现时多采用查表方式,下面是定义的供查找用的表*/

staticBYTEwz_lefttable[16]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};

staticULONG32wz_leftandtab[3]={0x0,0x80000000,0xc0000000};

staticBYTEwz_keyleft[28]=//前28位

57,49,41,33,25,17,9,1,58,50,42,34,26,18,

10,2,59,51,43,35,27,19,11,3,60,52,44,36

staticBYTEwz_keyright[28]={//后28位密钥

63,55,47,39,31,23,15,7,62,54,46,38,30,22,

14,6,61,53,45,37,29,21,13,5,28,20,12,4

staticBYTEwz_keychoose[48]={

14,17,11,24,1,5,3,28,15,6,21,10,

23,19,12,4,26,8,16,7,27,20,13,2,

41,52,31,37,47,55,30,40,51,45,33,48,

44,49,39,56,34,53,46,42,50,36,29,32

staticBYTEwz_pc4[64]={/*最后一次调整*/

40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,

38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,

36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,

34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25

staticBYTEwz_pc1[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,37,29,21,13,5,63,55,47,39,31,23,15,7

};

staticBYTEwz_pc3[32]={

16,7,20,21,29,12,28,17,1,15,23,26,

5,18,31,10,2,8,24,14,32,27,3,9,

19,13,30,6,22,11,4,25

staticULONG32wz_pc2[64]={

0x80000000L,0x40000000L,0x20000000L,0x10000000L,0x8000000L,

0x4000000L,0x2000000L,0x1000000L,0x800000L,0x400000L,

0x200000L,0x100000L,0x80000L,0x40000L,0x20000L,0x10000L,

0x8000L,0x4000L,0x2000L,0x1000L,0x800L,0x400L,0x200L,

0x100L,0x80L,0x40L,0x20L,0x10L,0x8L,0x4L,0x2L,0x1L,

0x80000000L,0x40000000L,0x20000000L,0x10000000L,0x8000000L,

0x200000L,0x100000L,0x80000L,0x40000L,0x20000L,0x10000L,

0x8000L,0x4000L,0x2000L,0x1000L,0x800L,0x400L,0x200L,

0x100L,0x80L,0x40L,0x20L,0x10L,0x8L,0x4L,0x2L,0x1L,

staticBYTEexptab3[48]={

32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,

12,13,14,15,16,17,16,17,18,19,20,21,

20,21,22,23,24,25,24,25,26,27,28,29,

28,29,30,31,32,1

staticBYTESP[8][64]=

{

0xe,0x0,0x4,0xf,0xd,0x7,0x1,0x4,0x2,0xe,0xf,0x2,0xb,

0xd,0x8,0x1,0x3,0xa,0xa,0x6,0x6,0xc,0xc,0xb,0x5,0x9,

0x9,0x5,0x0,0x3,0x7,0x8,0x4,0xf,0x1,0xc,0xe,0x8,0x8,

0x2,0xd,0x4,0x6,0x9,0x2,0x1,0xb,0x7,0xf,0x5,0xc,0xb,

0x9,0x3,0x7,0xe,0x3,0xa,0xa,0x0,0x5,0x6,0x0,0xd

},

{

0xf,0x3,0x1,0xd,0x8,0x4,0xe,0x7,0x6,0xf,0xb,0x2,0x3,

0x8,0x4,0xf,0x9,0xc,0x7,0x0,0x2,0x1,0xd,0xa,0xc,0x6,

0x0,0x9,0x5,0xb,0xa,0x5,0x0,0xd,0xe,0x8,0x7,0xa,0xb,

0x1,0xa,0x3,0x4,0xf,0xd,0x4,0x1,0x2,0x5,0xb,0x8,0x6,

0xc,0x7,0x6,0xc,0x9,0x0,0x3,0x5,0x2,0xe,0xf,0x9

0xa,0xd,0x0,0x7,0x9,0x0,0xe,0x9,0x6,0x3,0x3,0x4,0xf,

0x6,0x5,0xa,0x1,0x2,0xd,0x8,0xc,0x5,0x7,0xe,0xb,0xc,

0x4,0xb,0x2,0xf,0x8,0x1,0xd,0x1,0x6,0xa,0x4,0xd,0x9,

0x0,0x8,0x6,0xf,0x9,0x3,0x8,0x0,0x7,0xb,0x4,0x1,0xf,

0x2,0xe,0xc,0x3,0x5,0xb,0xa,0x5,0xe,0x2,0x7,0xc

0x7,0xd,0xd,0x8,0xe,0xb,0x3,0x5,0x0,0x6,0x6,0xf,0x9,

0x0,0xa,0x3,0x1,0x4,0x2,0x7,0x8,0x2,0x5,0xc,0xb,0x1,

0xc,0xa,0x4,0xe,0xf,0x9,0xa,0x3,0x6,0xf,0x9,0x0,0x0,

0x6,0xc,0xa,0xb,0xa,0x7,0xd,0xd,0x8,0xf,0x9,0x1,0x4,

0x3,0x5,0xe,0xb,0x5,0xc,0x2,0x7,0x8,0x2,0x4,0xe

0x2,0xe,0xc,0xb,0x4,0x2,0x1,0xc,0x7,0x4,0xa,0x7,0xb,

0xd,0x6,0x1,0x8,0x5,0x5,0x0,0x3,0xf,0xf,0xa,0xd,0x3,

0x0,0x9,0xe,0x8,0x9,0x6,0x4,0xb,0x2,0x8,0x1,0xc,0xb,

0x7,0xa,0x1,0xd,0xe,0x7,0x2,0x8,0xd,0xf,0x6,0x9,0xf,

0xc,0x0,0x5,0x9,0x6,0xa,0x3,0x4,0x0,0x5,0xe,0x3

0xc,0xa,0x1,0xf,0xa,0x4,0xf,0x2,0x9,0x7,0x2,0xc,0x6,

0x9,0x8,0x5,0x0,0x6,0xd,0x1,0x3,0xd,0x4,0xe,0xe,0x0,

0x7,0xb,0x5,0x3,0xb,0x8,0x9,0x4,0xe,0x3,0xf,0x2,0x5,

0xc,0x2,0x9,0x8,0x5,0xc,0xf,0x3,0xa,0x7,0xb,0x0,0xe,

0x4,0x1,0xa,0x7,0x1,0x6,0xd,0x0,0xb,0x8,0x6,0xd

0x4,0xd,0xb,0x0,0x2,0xb,0xe,0x7,0xf,0x4,0x0,0x9,0x8,

0x1,0xd,0xa,0x3,0xe,0xc,0x3,0x9,0x5,0x7,0xc,0x5,0x2,

0xa,0xf,0x6,0x8,0x1,0x6,0x1,0x6,0x4,0xb,0xb,0xd,0xd,

0x8,0xc,0x1,0x3,0x4,0x7,0xa,0xe,0x7,0xa,0x9,0xf,0x5,

0x6,0x0,0x8,0xf,0x0,0xe,0x5,0x2,0x9,0x3,0x2,0xc

0xd,0x1,0x2,0xf,0x8,0xd,0x4,0x8,0x6,0xa,0xf,0x3,0xb,

0x7,0x1,0x4,0xa,0xc,0x9,0x5,0x3,0x6,0xe,0xb,0x5,0x0,

0x0,0xe,0xc,0x9,0x7,0x2,0x7,0x2,0xb,0x1,0x4,0xe,0x1,

0x7,0x9,0x4,0xc,0xa,0xe,0x8,0x2,0xd,0x0,0xf,0x6,0xc,

0xa,0x9,0xd,0x0,0xf,0x3,0x3,0x5,0x5,0x6,0x8,0xb

}

/*函数实现*/

INT32DdesN(BYTE*data,BYTE**key,ULONG32n_key,ULONG32readlen)

INT32i;

for(i=n_key;

i>

0;

i--)

Ddes(data,key[i-1],readlen);

returnSUCCESS;

INT32desN(BYTE*data,BYTE**key,ULONG32n_key,ULONG32readlen)

ULONG32i=0;

for(i=0;

n_key;

des(data,key[i],readlen);

INT32des3(BYTE*data,BYTE*key,ULONG32n,ULONG32readlen)

ULONG32i=0,j=0;

makefirstkey((ULONG32*)key);

/*产生密钥*/

n;

for(j=0;

j<

readlen;

j+=8)

handle_data((ULONG32*)&

data[j],DESENCRY);

}

INT32Ddes3(BYTE*data,BYTE*key,ULONG32n,ULONG32readlen)

data[j],DESDECRY);

INT32des(BYTE*data,BYTE*key,INT32readlen)

INT32i=0;

i+=8)

data[i],DESENCRY);

INT32Ddes(BYTE*data,BYTE*key,INT32readlen)

data[i],DESDECRY);

INT32handle_data(ULONG32*left,INTchoice)

INT32number=0,j=0;

ULONG32*right=&

left[1];

ULONG32tmp=0;

ULONG32tmpbuf[2]={0};

/*第一次调整wz_pc1[64]*/

for(j=0;

64;

j++)

if(j<

32)

if(wz_pc1[j]>

32)/*属于right*/

if(*right&

wz_pc2[wz_pc1[j]-1])

tmpbuf[0]|=wz_pc2[j];

else

if(*left&

tmpbuf[1]|=wz_pc2[j];

*left=tmpbuf[0];

*right=tmpbuf[1];

tmpbuf[0]=0;

tmpbuf[1]=0;

switch(choice)

caseDESENCRY:

for(number=0;

number<

16;

number++)

makedata(left,right,(ULONG32)number);

break;

caseDESDECRY:

for(number=15;

number>

=0;

number--)

makedata(left,right,(ULONG32)number);

default:

/*最后一轮操作不交换左右值*/

tmp=*left;

*left=*right;

*right=tmp;

/*最后一次调整wz_pc4[64]*/

if(wz_pc4[j]>

wz_pc2[wz_pc4[j]-1])

INT32makedata(ULONG32*left,ULONG32*right,ULONG32number)

INT32j;

ULONG32oldright=*right;

BYTErexpbuf[8]={0};

ULONG32datatmp=0;

ULONG32exp[2]={0};

//由32扩充至48位

48;

/*两个32位,每个存放24位*/

if(j<

24)

wz_pc2[exptab3[j]-1])

exp[0]|=wz_pc2[j];

exp[1]|=wz_pc2[j-24];

2;

{

exp[j]^=g_outkey[number][j];

}

/*由48->

32*/

exp[1]>

>

=8;

rexpbuf[7]=(BYTE)(exp[1]&

0x0000003fL);

=6;

rexpbuf[6]=(BYTE)(exp[1]&

rexpbuf[5]=(BYTE)(exp[1]&

rexpbuf[4]=(BYTE)(exp[1]&

exp[0]>

rexpbuf[3]=(BYTE)(exp[0]&

rexpbuf[2]=(BYTE)(exp[0]&

rexpbuf[1]=(BYTE)(exp[0]&

rexpbuf[0]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1