DES 算法.docx
- 文档编号:30155229
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:24
- 大小:19.13KB
DES 算法.docx
《DES 算法.docx》由会员分享,可在线阅读,更多相关《DES 算法.docx(24页珍藏版)》请在冰豆网上搜索。
DES算法
#include"stdafx.h"
#ifndef_DES_H_
#define_DES_H_
#defineIN
#defineOUT
#defineINOUT
#defineINT32UUINT32
#defineINT16UUSHORT
#defineINT8UUCHAR
#defineEN00
#defineDE11
typedefstruct{
INT32Uek[32];
INT32Udk[32];
}des_ctx;
staticINT32UKnL[32]={0L};
conststaticINT16Ubytebit[8]={0200,0100,040,020,010,04,02,01};
conststaticINT32Ubigbyte[24]={0x800000L,0x400000L,0x200000L,0x100000L,
0x80000L,0x40000L,0x20000L,0x10000L,
0x8000L,0x4000L,0x2000L,0x1000L,
0x800L,0x400L,0x200L,0x100L,
0x80L,0x40L,0x20L,0x10L,
0x8L,0x4L,0x2L,0x1L};
conststaticINT8Upc1[56]={56,48,40,32,24,16,8,
0,57,49,41,33,25,17,
9,1,58,50,42,34,26,
18,10,2,59,51,43,35,
62,54,46,38,30,22,14,
6,61,53,45,37,29,21,
13,5,60,52,44,36,28,
20,12,4,27,19,11,3};
conststaticINT8Utotrot[16]={1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28};
conststaticINT8Upc2[48]={13,16,10,23,0,4,2,27,14,5,20,9,22,
18,11,3,25,7,15,6,26,19,12,1,40,51,30,36,46,54,29,
39,50,44,32,47,43,48,38,55,33,52,45,41,49,35,28,31};
//TheDefinitionforS-Box(SP1-SP8)
conststaticINT32USP1[64]={0x01010400L,0x00000000L,0x00010000L,0x01010404L,
0x01010004L,0x00010404L,0x00000004L,0x00010000L,
0x00000400L,0x01010400L,0x01010404L,0x00000400L,
0x01000404L,0x01010004L,0x01000000L,0x00000004L,
0x00000404L,0x01000400L,0x01000400L,0x00010400L,
0x00010400L,0x01010000L,0x01010000L,0x01000404L,
0x00010004L,0x01000004L,0x01000004L,0x00010004L,
0x00000000L,0x00000404L,0x00010404L,0x01000000L,
0x00010000L,0x01010404L,0x00000004L,0x01010000L,
0x01010400L,0x01000000L,0x01000000L,0x00000400L,
0x01010004L,0x00010000L,0x00010400L,0x01000004L,
0x00000400L,0x00000004L,0x01000404L,0x00010404L,
0x01010404L,0x00010004L,0x01010000L,0x01000404L,
0x01000004L,0x00000404L,0x00010404L,0x01010400L,
0x00000404L,0x01000400L,0x01000400L,0x00000000L,
0x00010004L,0x00010400L,0x00000000L,0x01010004L
};
//S-Box2
conststaticINT32USP2[64]={0x80108020L,0x80008000L,0x00008000L,0x00108020L,
0x00100000L,0x00000020L,0x80100020L,0x80008020L,
0x80000020L,0x80108020L,0x80108000L,0x80000000L,
0x80008000L,0x00100000L,0x00000020L,0x80100020L,
0x00108000L,0x00100020L,0x80008020L,0x00000000L,
0x80000000L,0x00008000L,0x00108020L,0x80100000L,
0x00100020L,0x80000020L,0x00000000L,0x00108000L,
0x00008020L,0x80108000L,0x80100000L,0x00008020L,
0x00000000L,0x00108020L,0x80100020L,0x00100000L,
0x80008020L,0x80100000L,0x80108000L,0x00008000L,
0x80100000L,0x80008000L,0x00000020L,0x80108020L,
0x00108020L,0x00000020L,0x00008000L,0x80000000L,
0x00008020L,0x80108000L,0x00100000L,0x80000020L,
0x00100020L,0x80008020L,0x80000020L,0x00100020L,
0x00108000L,0x00000000L,0x80008000L,0x00008020L,
0x80000000L,0x80100020L,0x80108020L,0x00108000L
};
//S-Box3
conststaticINT32USP3[64]={0x00000208L,0x08020200L,0x00000000L,0x08020008L,
0x08000200L,0x00000000L,0x00020208L,0x08000200L,
0x00020008L,0x08000008L,0x08000008L,0x00020000L,
0x08020208L,0x00020008L,0x08020000L,0x00000208L,
0x08000000L,0x00000008L,0x08020200L,0x00000200L,
0x00020200L,0x08020000L,0x08020008L,0x00020208L,
0x08000208L,0x00020200L,0x00020000L,0x08000208L,
0x00000008L,0x08020208L,0x00000200L,0x08000000L,
0x08020200L,0x08000000L,0x00020008L,0x00000208L,
0x00020000L,0x08020200L,0x08000200L,0x00000000L,
0x00000200L,0x00020008L,0x08020208L,0x08000200L,
0x08000008L,0x00000200L,0x00000000L,0x08020008L,
0x08000208L,0x00020000L,0x08000000L,0x08020208L,
0x00000008L,0x00020208L,0x00020200L,0x08000008L,
0x08020000L,0x08000208L,0x00000208L,0x08020000L,
0x00020208L,0x00000008L,0x08020008L,0x00020200L
};
//S-Box4
conststaticINT32USP4[64]={0x00802001L,0x00002081L,0x00002081L,0x00000080L,
0x00802080L,0x00800081L,0x00800001L,0x00002001L,
0x00000000L,0x00802000L,0x00802000L,0x00802081L,
0x00000081L,0x00000000L,0x00800080L,0x00800001L,
0x00000001L,0x00002000L,0x00800000L,0x00802001L,
0x00000080L,0x00800000L,0x00002001L,0x00002080L,
0x00800081L,0x00000001L,0x00002080L,0x00800080L,
0x00002000L,0x00802080L,0x00802081L,0x00000081L,
0x00800080L,0x00800001L,0x00802000L,0x00802081L,
0x00000081L,0x00000000L,0x00000000L,0x00802000L,
0x00002080L,0x00800080L,0x00800081L,0x00000001L,
0x00802001L,0x00002081L,0x00002081L,0x00000080L,
0x00802081L,0x00000081L,0x00000001L,0x00002000L,
0x00800001L,0x00002001L,0x00802080L,0x00800081L,
0x00002001L,0x00002080L,0x00800000L,0x00802001L,
0x00000080L,0x00800000L,0x00002000L,0x00802080L
};
//S-Box5
conststaticINT32USP5[64]={0x00000100L,0x02080100L,0x02080000L,0x42000100L,
0x00080000L,0x00000100L,0x40000000L,0x02080000L,
0x40080100L,0x00080000L,0x02000100L,0x40080100L,
0x42000100L,0x42080000L,0x00080100L,0x40000000L,
0x02000000L,0x40080000L,0x40080000L,0x00000000L,
0x40000100L,0x42080100L,0x42080100L,0x02000100L,
0x42080000L,0x40000100L,0x00000000L,0x42000000L,
0x02080100L,0x02000000L,0x42000000L,0x00080100L,
0x00080000L,0x42000100L,0x00000100L,0x02000000L,
0x40000000L,0x02080000L,0x42000100L,0x40080100L,
0x02000100L,0x40000000L,0x42080000L,0x02080100L,
0x40080100L,0x00000100L,0x02000000L,0x42080000L,
0x42080100L,0x00080100L,0x42000000L,0x42080100L,
0x02080000L,0x00000000L,0x40080000L,0x42000000L,
0x00080100L,0x02000100L,0x40000100L,0x00080000L,
0x00000000L,0x40080000L,0x02080100L,0x40000100L
};
//S-Box6
conststaticINT32USP6[64]={0x20000010L,0x20400000L,0x00004000L,0x20404010L,
0x20400000L,0x00000010L,0x20404010L,0x00400000L,
0x20004000L,0x00404010L,0x00400000L,0x20000010L,
0x00400010L,0x20004000L,0x20000000L,0x00004010L,
0x00000000L,0x00400010L,0x20004010L,0x00004000L,
0x00404000L,0x20004010L,0x00000010L,0x20400010L,
0x20400010L,0x00000000L,0x00404010L,0x20404000L,
0x00004010L,0x00404000L,0x20404000L,0x20000000L,
0x20004000L,0x00000010L,0x20400010L,0x00404000L,
0x20404010L,0x00400000L,0x00004010L,0x20000010L,
0x00400000L,0x20004000L,0x20000000L,0x00004010L,
0x20000010L,0x20404010L,0x00404000L,0x20400000L,
0x00404010L,0x20404000L,0x00000000L,0x20400010L,
0x00000010L,0x00004000L,0x20400000L,0x00404010L,
0x00004000L,0x00400010L,0x20004010L,0x00000000L,
0x20404000L,0x20000000L,0x00400010L,0x20004010L
};
//S-Box7
conststaticINT32USP7[64]={0x00200000L,0x04200002L,0x04000802L,0x00000000L,
0x00000800L,0x04000802L,0x00200802L,0x04200800L,
0x04200802L,0x00200000L,0x00000000L,0x04000002L,
0x00000002L,0x04000000L,0x04200002L,0x00000802L,
0x04000800L,0x00200802L,0x00200002L,0x04000800L,
0x04000002L,0x04200000L,0x04200800L,0x00200002L,
0x04200000L,0x00000800L,0x00000802L,0x04200802L,
0x00200800L,0x00000002L,0x04000000L,0x00200800L,
0x04000000L,0x00200800L,0x00200000L,0x04000802L,
0x04000802L,0x04200002L,0x04200002L,0x00000002L,
0x00200002L,0x04000000L,0x04000800L,0x00200000L,
0x04200800L,0x00000802L,0x00200802L,0x04200800L,
0x00000802L,0x04000002L,0x04200802L,0x04200000L,
0x00200800L,0x00000000L,0x00000002L,0x04200802L,
0x00000000L,0x00200802L,0x04200000L,0x00000800L,
0x04000002L,0x04000800L,0x00000800L,0x00200002L
};
//S-Box8
conststaticINT32USP8[64]={0x10001040L,0x00001000L,0x00040000L,0x10041040L,
0x10000000L,0x10001040L,0x00000040L,0x10000000L,
0x00040040L,0x10040000L,0x10041040L,0x00041000L,
0x10041000L,0x00041040L,0x00001000L,0x00000040L,
0x10040000L,0x10000040L,0x10001000L,0x00001040L,
0x00041000L,0x00040040L,0x10040040L,0x10041000L,
0x00001040L,0x00000000L,0x00000000L,0x10040040L,
0x10000040L,0x10001000L,0x00041040L,0x00040000L,
0x00041040L,0x00040000L,0x10041000L,0x00001000L,
0x00000040L,0x10040040L,0x00001000L,0x00041040L,
0x10001000L,0x00000040L,0x10000040L,0x10040000L,
0x10040040L,0x10000000L,0x00040000L,0x10001040L,
0x00000000L,0x10041040L,0x00040040L,0x10000040L,
0x10040000L,0x10001000L,0x10001040L,0x00000000L,
0x10041040L,0x00041000L,0x00041000L,0x00001040L,
0x00001040L,0x00040040L,0x10000000L,0x10041000L
};
classCDES
{
public:
CDES(){};//construction
~CDES(){};//desctruction
//tripledesencryption
//everyblockhas8bytesdata
voiddes_cbc_encryption(INT8Utype,INT8U*data,INT8U*key,INT8U*init_vector,INT16Ublocks){
memxor(data,init_vector,8);
DEA_encryption(type,data,key);
for(INT16Ui=0;i { memxor(data+8*(i+1),data+8*i,8); DEA_encryption(type,data+8*(i+1),key); } } //decryptthecipherwith3DESalgorithminCBCmodeifdefinedUSE_ENCRYPTION //elseitwillbereturnedrightaway. voiddes_cbc_decryption(INT8Utype, INT8U*cipher, INT8U*key, INT8U*init_vector, INT16Ublocks) { INT8Utmp_buf[16];//temporarybuffer memset(tmp_buf,0,16); MemCpy(tmp_buf,cipher,8); DEA_decryption(type,cipher,key); memxor(cipher,init_vector,8); /*CStringtem,tem2; for(intj=0;j<8;j++) { tem.Format("%C",cipher[j]); tem2+=tem; } AfxMessageBox(tem2); Sleep(10000);*/ for(INT16Ui=1;i { MemCpy(tmp_buf+8,cipher+8*i,8); DEA_decryption(type,cipher+8*i,key); memxor(cipher+8*i,tmp_buf,8); MemCpy(tmp_buf,tmp_buf+8,8); } } //iftypeiszero,thenusesingledesencryption //elseusetripledesencryption. voidDEA_encryption(INT8Utype,INT8U*data,INT8U*key) { if(type==0)single_des_enc(data,key,1); elsetriple_des_enc(data,key,1); } //================================================================= //Name: single_des_enc //Function: singleDESencryption //input: Data,key,blocks //outp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DES 算法