?? cdes.cpp
字號:
// CDES.cpp: implementation of the CDES class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CDES.h"
#include <memory.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
DES::DES()
{
IP[0]=58;IP[1]=50;IP[2]=42;IP[3]=34;IP[4]=26;IP[5]=18;IP[6]=10;IP[7]=2;
IP[8]=60;IP[9]=52;IP[10]=44;IP[11]=36;IP[12]=28;IP[13]=20;IP[14]=12;IP[15]=4;
IP[16]=62;IP[17]=54;IP[18]=46;IP[19]=38;IP[20]=30;IP[21]=22;IP[22]=14;IP[23]=6;
IP[24]=64;IP[25]=56;IP[26]=48;IP[27]=40;IP[28]=32;IP[29]=24;IP[30]=16;IP[31]=8;
IP[32]=57;IP[33]=49;IP[34]=41;IP[35]=33;IP[36]=25;IP[37]=17;IP[38]=9;IP[39]=1;
IP[40]=59;IP[41]=51;IP[42]=43;IP[43]=35;IP[44]=27;IP[45]=19;IP[46]=11;IP[47]=3;
IP[48]=61;IP[49]=53;IP[50]=45;IP[51]=37;IP[52]=29;IP[53]=21;IP[54]=13;IP[55]=5;
IP[56]=63;IP[57]=55;IP[58]=47;IP[59]=39;IP[60]=31;IP[61]=23;IP[62]=15;IP[63]=7;
E[0]=32; E[1]=1; E[2]=2; E[3]=3; E[4]=4; E[5]=5;
E[6]=4 ; E[7]=5; E[8]=6; E[9]=7; E[10]=8; E[11]=9;
E[12]=8 ; E[13]=9;E[14]=10;E[15]=11;E[16]=12;E[17]=13;
E[18]=12;E[19]=13;E[20]=14;E[21]=15;E[22]=16;E[23]=17;
E[24]=16;E[25]=17;E[26]=18;E[27]=19;E[28]=20;E[29]=21;
E[30]=20;E[31]=21;E[32]=22;E[33]=23;E[34]=24;E[35]=25;
E[36]=24;E[37]=25;E[38]=26;E[39]=27;E[40]=28;E[41]=29;
E[42]=28;E[43]=29;E[44]=30;E[45]=31;E[46]=32;E[47]=1;
IP_1[0]=40;IP_1[1]=8;IP_1[2]=48;IP_1[3]=16;IP_1[4]=56;IP_1[5]=24;IP_1[6]=64;IP_1[7]=32;
IP_1[8]=39;IP_1[9]=7;IP_1[10]=47;IP_1[11]=15;IP_1[12]=55;IP_1[13]=23;IP_1[14]=63;IP_1[15]=31;
IP_1[16]=38;IP_1[17]=6;IP_1[18]=46;IP_1[19]=14;IP_1[20]=54;IP_1[21]=22;IP_1[22]=62;IP_1[23]=30;
IP_1[24]=37;IP_1[25]=5;IP_1[26]=45;IP_1[27]=13;IP_1[28]=53;IP_1[29]=21;IP_1[30]=61;IP_1[31]=29;
IP_1[32]=36;IP_1[33]=4;IP_1[34]=44;IP_1[35]=12;IP_1[36]=52;IP_1[37]=20;IP_1[38]=60;IP_1[39]=28;
IP_1[40]=35;IP_1[41]=3;IP_1[42]=43;IP_1[43]=11;IP_1[44]=51;IP_1[45]=19;IP_1[46]=59;IP_1[47]=27;
IP_1[48]=34;IP_1[49]=2;IP_1[50]=42;IP_1[51]=10;IP_1[52]=50;IP_1[53]=18;IP_1[54]=58;IP_1[55]=26;
IP_1[56]=33;IP_1[57]=1;IP_1[58]=41;IP_1[59]=9;IP_1[60]=49;IP_1[61]=17;IP_1[62]=57;IP_1[63]=25;
S1[0][0]=14;S1[0][1]=4;S1[0][2]=13;S1[0][3]=1;S1[0][4]=2;S1[0][5]=15;S1[0][6]=11;S1[0][7]=8;
S1[0][8]=3;S1[0][9]=10;S1[0][10]=6;S1[0][11]=12;S1[0][12]=5;S1[0][13]=9;S1[0][14]=0;S1[0][15]=7;
S1[1][0]=0;S1[1][1]=15;S1[1][2]=7;S1[1][3]=4;S1[1][4]=14;S1[1][5]=2;S1[1][6]=13;S1[1][7]=1;
S1[1][8]=10;S1[1][9]=6;S1[1][10]=12;S1[1][11]=11;S1[1][12]=9;S1[1][13]=5;S1[1][14]=3;S1[1][15]=8;
S1[2][0]=4;S1[2][1]=1;S1[2][2]=14;S1[2][3]=8;S1[2][4]=13;S1[2][5]=6;S1[2][6]=2;S1[2][7]=11;
S1[2][8]=15;S1[2][9]=12;S1[2][10]=9;S1[2][11]=7;S1[2][12]=3;S1[2][13]=10;S1[2][14]=5;S1[2][15]=0;
S1[3][0]=15;S1[3][1]=12;S1[3][2]=8;S1[3][3]=2;S1[3][4]=4;S1[3][5]=9;S1[3][6]=1;S1[3][7]=7;
S1[3][8]=5;S1[3][9]=11;S1[3][10]=3;S1[3][11]=14;S1[3][12]=10;S1[3][13]=0;S1[3][14]=6;S1[3][15]=13;
S2[0][0]=15;S2[0][1]=1;S2[0][2]=8;S2[0][3]=14;S2[0][4]=6;S2[0][5]=11;S2[0][6]=3;S2[0][7]=4;
S2[0][8]=9;S2[0][9]=7;S2[0][10]=2;S2[0][11]=13;S2[0][12]=12;S2[0][13]=0;S2[0][14]=5;S2[0][15]=10;
S2[1][0]=3;S2[1][1]=13;S2[1][2]=4;S2[1][3]=7;S2[1][4]=15;S2[1][5]=2;S2[1][6]=8;S2[1][7]=14;
S2[1][8]=12;S2[1][9]=0;S2[1][10]=1;S2[1][11]=10;S2[1][12]=6;S2[1][13]=9;S2[1][14]=11;S2[1][15]=5;
S2[2][0]=0;S2[2][1]=14;S2[2][2]=7;S2[2][3]=11;S2[2][4]=10;S2[2][5]=4;S2[2][6]=13;S2[2][7]=1;
S2[2][8]=5;S2[2][9]=8;S2[2][10]=12;S2[2][11]=6;S2[2][12]=9;S2[2][13]=3;S2[2][14]=2;S2[2][15]=15;
S2[3][0]=13;S2[3][1]=8;S2[3][2]=10;S2[3][3]=1;S2[3][4]=3;S2[3][5]=15;S2[3][6]=4;S2[3][7]=2;
S2[3][8]=11;S2[3][9]=6;S2[3][10]=7;S2[3][11]=12;S2[3][12]=0;S2[3][13]=5;S2[3][14]=14;S2[3][15]=9;
S3[0][0]=10;S3[0][1]=0;S3[0][2]=9;S3[0][3]=14;S3[0][4]=6;S3[0][5]=3;S3[0][6]=15;S3[0][7]=5;
S3[0][8]=1;S3[0][9]=13;S3[0][10]=12;S3[0][11]=7;S3[0][12]=11;S3[0][13]=4;S3[0][14]=2;S3[0][15]=8;
S3[1][0]=13;S3[1][1]=7;S3[1][2]=0;S3[1][3]=9;S3[1][4]=3;S3[1][5]=4;S3[1][6]=6;S3[1][7]=10;
S3[1][8]=2;S3[1][9]=8;S3[1][10]=5;S3[1][11]=14;S3[1][12]=12;S3[1][13]=11;S3[1][14]=15;S3[1][15]=1;
S3[2][0]=13;S3[2][1]=6;S3[2][2]=4;S3[2][3]=9;S3[2][4]=8;S3[2][5]=15;S3[2][6]=3;S3[2][7]=0;
S3[2][8]=11;S3[2][9]=1;S3[2][10]=2;S3[2][11]=12;S3[2][12]=5;S3[2][13]=10;S3[2][14]=14;S3[2][15]=7;
S3[3][0]=1;S3[3][1]=10;S3[3][2]=13;S3[3][3]=0;S3[3][4]=6;S3[3][5]=9;S3[3][6]=8;S3[3][7]=7;
S3[3][8]=4;S3[3][9]=15;S3[3][10]=14;S3[3][11]=3;S3[3][12]=11;S3[3][13]=5;S3[3][14]=2;S3[3][15]=12;
S4[0][0]=7;S4[0][1]=13;S4[0][2]=14;S4[0][3]=3;S4[0][4]=0;S4[0][5]=6;S4[0][6]=9;S4[0][7]=10;
S4[0][8]=1;S4[0][9]=2;S4[0][10]=8;S4[0][11]=5;S4[0][12]=11;S4[0][13]=12;S4[0][14]=4;S4[0][15]=15;
S4[1][0]=13;S4[1][1]=8;S4[1][2]=11;S4[1][3]=5;S4[1][4]=6;S4[1][5]=15;S4[1][6]=0;S4[1][7]=3;
S4[1][8]=4;S4[1][9]=7;S4[1][10]=2;S4[1][11]=12;S4[1][12]=1;S4[1][13]=10;S4[1][14]=14;S4[1][15]=9;
S4[2][0]=10;S4[2][1]=6;S4[2][2]=9;S4[2][3]=0;S4[2][4]=12;S4[2][5]=11;S4[2][6]=7;S4[2][7]=13;
S4[2][8]=15;S4[2][9]=1;S4[2][10]=3;S4[2][11]=14;S4[2][12]=5;S4[2][13]=2;S4[2][14]=8;S4[2][15]=4;
S4[3][0]=3;S4[3][1]=15;S4[3][2]=0;S4[3][3]=6;S4[3][4]=10;S4[3][5]=1;S4[3][6]=13;S4[3][7]=8;
S4[3][8]=9;S4[3][9]=4;S4[3][10]=5;S4[3][11]=11;S4[3][12]=12;S4[3][13]=7;S4[3][14]=2;S4[3][15]=14;
S5[0][0]=2;S5[0][1]=12;S5[0][2]=4;S5[0][3]=1;S5[0][4]=7;S5[0][5]=10;S5[0][6]=11;S5[0][7]=6;
S5[0][8]=8;S5[0][9]=5;S5[0][10]=3;S5[0][11]=15;S5[0][12]=13;S5[0][13]=0;S5[0][14]=14;S5[0][15]=9;
S5[1][0]=14;S5[1][1]=11;S5[1][2]=2;S5[1][3]=12;S5[1][4]=4;S5[1][5]=7;S5[1][6]=13;S5[1][7]=1;
S5[1][8]=5;S5[1][9]=0;S5[1][10]=15;S5[1][11]=10;S5[1][12]=3;S5[1][13]=9;S5[1][14]=8;S5[1][15]=6;
S5[2][0]=4;S5[2][1]=2;S5[2][2]=1;S5[2][3]=11;S5[2][4]=10;S5[2][5]=13;S5[2][6]=7;S5[2][7]=8;
S5[2][8]=15;S5[2][9]=9;S5[2][10]=12;S5[2][11]=5;S5[2][12]=6;S5[2][13]=3;S5[2][14]=0;S5[2][15]=14;
S5[3][0]=11;S5[3][1]=8;S5[3][2]=12;S5[3][3]=7;S5[3][4]=1;S5[3][5]=14;S5[3][6]=2;S5[3][7]=13;
S5[3][8]=6;S5[3][9]=15;S5[3][10]=0;S5[3][11]=9;S5[3][12]=10;S5[3][13]=4;S5[3][14]=5;S5[3][15]=3;
/*
unsigned char S5[4][16]={
{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9},
{14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6},
{4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14},
{11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}
};*/
S6[0][0]=12;S6[0][1]=1;S6[0][2]=10;S6[0][3]=15;S6[0][4]=9;S6[0][5]=2;S6[0][6]=6;S6[0][7]=8;
S6[0][8]=0;S6[0][9]=13;S6[0][10]=3;S6[0][11]=4;S6[0][12]=14;S6[0][13]=7;S6[0][14]=5;S6[0][15]=11;
S6[1][0]=10;S6[1][1]=15;S6[1][2]=4;S6[1][3]=2;S6[1][4]=7;S6[1][5]=12;S6[1][6]=9;S6[1][7]=5;
S6[1][8]=6;S6[1][9]=1;S6[1][10]=13;S6[1][11]=14;S6[1][12]=0;S6[1][13]=11;S6[1][14]=3;S6[1][15]=8;
S6[2][0]=9;S6[2][1]=14;S6[2][2]=15;S6[2][3]=5;S6[2][4]=2;S6[2][5]=8;S6[2][6]=12;S6[2][7]=3;
S6[2][8]=7;S6[2][9]=0;S6[2][10]=4;S6[2][11]=10;S6[2][12]=1;S6[2][13]=13;S6[2][14]=11;S6[2][15]=6;
S6[3][0]=4;S6[3][1]=3;S6[3][2]=2;S6[3][3]=12;S6[3][4]=9;S6[3][5]=5;S6[3][6]=15;S6[3][7]=10;
S6[3][8]=11;S6[3][9]=14;S6[3][10]=1;S6[3][11]=7;S6[3][12]=6;S6[3][13]=0;S6[3][14]=8;S6[3][15]=13;
/*
unsigned char S6[4][16]={
{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11},
{10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8},
{9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6},
{4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13}
};
*/
S7[0][0]=4;S7[0][1]=11;S7[0][2]=2;S7[0][3]=14;S7[0][4]=15;S7[0][5]=0;S7[0][6]=8;S7[0][7]=13;
S7[0][8]=3;S7[0][9]=12;S7[0][10]=9;S7[0][11]=7;S7[0][12]=5;S7[0][13]=10;S7[0][14]=6;S7[0][15]=1;
S7[1][0]=13;S7[1][1]=0;S7[1][2]=11;S7[1][3]=7;S7[1][4]=4;S7[1][5]=9;S7[1][6]=1;S7[1][7]=10;
S7[1][8]=14;S7[1][9]=3;S7[1][10]=5;S7[1][11]=12;S7[1][12]=2;S7[1][13]=15;S7[1][14]=8;S7[1][15]=6;
S7[2][0]=1;S7[2][1]=4;S7[2][2]=11;S7[2][3]=13;S7[2][4]=12;S7[2][5]=3;S7[2][6]=7;S7[2][7]=14;
S7[2][8]=10;S7[2][9]=15;S7[2][10]=6;S7[2][11]=8;S7[2][12]=0;S7[2][13]=5;S7[2][14]=9;S7[2][15]=2;
S7[3][0]=6;S7[3][1]=11;S7[3][2]=13;S7[3][3]=8;S7[3][4]=1;S7[3][5]=4;S7[3][6]=10;S7[3][7]=7;
S7[3][8]=9;S7[3][9]=5;S7[3][10]=0;S7[3][11]=15;S7[3][12]=14;S7[3][13]=2;S7[3][14]=3;S7[3][15]=12;
/*
unsigned char S7[4][16]={
{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},
{13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6},
{1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2},
{6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12}
};
*/
S8[0][0]=13;S8[0][1]=2;S8[0][2]=8;S8[0][3]=4;S8[0][4]=6;S8[0][5]=15;S8[0][6]=11;S8[0][7]=1;
S8[0][8]=10;S8[0][9]=9;S8[0][10]=3;S8[0][11]=14;S8[0][12]=5;S8[0][13]=0;S8[0][14]=12;S8[0][15]=7;
S8[1][0]=1;S8[1][1]=15;S8[1][2]=13;S8[1][3]=8;S8[1][4]=10;S8[1][5]=3;S8[1][6]=7;S8[1][7]=4;
S8[1][8]=12;S8[1][9]=5;S8[1][10]=6;S8[1][11]=11;S8[1][12]=0;S8[1][13]=14;S8[1][14]=9;S8[1][15]=2;
S8[2][0]=7;S8[2][1]=11;S8[2][2]=4;S8[2][3]=1;S8[2][4]=9;S8[2][5]=12;S8[2][6]=14;S8[2][7]=2;
S8[2][8]=0;S8[2][9]=6;S8[2][10]=10;S8[2][11]=13;S8[2][12]=15;S8[2][13]=3;S8[2][14]=5;S8[2][15]=8;
S8[3][0]=2;S8[3][1]=1;S8[3][2]=14;S8[3][3]=7;S8[3][4]=4;S8[3][5]=10;S8[3][6]=8;S8[3][7]=13;
S8[3][8]=15;S8[3][9]=12;S8[3][10]=9;S8[3][11]=0;S8[3][12]=3;S8[3][13]=5;S8[3][14]=6;S8[3][15]=11;
/*
unsigned char S8[4][16]={
{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7},
{1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2},
{7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8},
{2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}
};
*/
P[0]=16;P[1]=7;P[2]=20;P[3]=21;P[4]=29;P[5]=12;P[6]=28;P[7]=17;
P[8]=1;P[9]=15;P[10]=23;P[11]=26;P[12]=5;P[13]=18;P[14]=31;P[15]=10;
P[16]=2;P[17]=8;P[18]=24;P[19]=14;P[20]=32;P[21]=27;P[22]=3;P[23]=9;
P[24]=19;P[25]=13;P[26]=30;P[27]=6;P[28]=22;P[29]=11;P[30]=4;P[31]=25;
/*int P[]={
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};
*/
PC_1[0]=57;PC_1[1]=49;PC_1[2]=41;PC_1[3]=33;PC_1[4]=25;PC_1[5]=17;PC_1[6]=9;
PC_1[7]=1;PC_1[8]=58;PC_1[9]=50;PC_1[10]=42;PC_1[11]=34;PC_1[12]=26;PC_1[13]=18;
PC_1[14]=10;PC_1[15]=2;PC_1[16]=59;PC_1[17]=51;PC_1[18]=43;PC_1[19]=35;PC_1[20]=27;
PC_1[21]=19;PC_1[22]=11;PC_1[23]=3;PC_1[24]=60;PC_1[25]=52;PC_1[26]=44;PC_1[27]=36;
PC_1[28]=63;PC_1[29]=55;PC_1[30]=47;PC_1[31]=39;PC_1[32]=31;PC_1[33]=23;PC_1[34]=15;
PC_1[35]=7;PC_1[36]=62;PC_1[37]=54;PC_1[38]=46;PC_1[39]=38;PC_1[40]=30;PC_1[41]=22;
PC_1[42]=14;PC_1[43]=6;PC_1[44]=61;PC_1[45]=53;PC_1[46]=45;PC_1[47]=37;PC_1[48]=29;
PC_1[49]=21;PC_1[50]=13;PC_1[51]=5;PC_1[52]=28;PC_1[53]=20;PC_1[54]=12;PC_1[55]=4;
/*
int PC_1[56]={
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,
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};
*/
PC_2[0]=14;PC_2[1]=17;PC_2[2]=11;PC_2[3]=24;PC_2[4]=1;PC_2[5]=5;
PC_2[6]=3;PC_2[7]=28;PC_2[8]=15;PC_2[9]=6;PC_2[10]=21;PC_2[11]=10;
PC_2[12]=23;PC_2[13]=19;PC_2[14]=12;PC_2[15]=4;PC_2[16]=26;PC_2[17]=8;
PC_2[18]=16;PC_2[19]=7;PC_2[20]=27;PC_2[21]=20;PC_2[22]=13;PC_2[23]=2;
PC_2[24]=41;PC_2[25]=52;PC_2[26]=31;PC_2[27]=37;PC_2[28]=47;PC_2[29]=55;
PC_2[30]=30;PC_2[31]=40;PC_2[32]=51;PC_2[33]=45;PC_2[34]=33;PC_2[35]=48;
PC_2[36]=44;PC_2[37]=49;PC_2[38]=39;PC_2[39]=56;PC_2[40]=34;PC_2[41]=53;
PC_2[42]=46;PC_2[43]=42;PC_2[44]=50;PC_2[45]=36;PC_2[46]=29;PC_2[47]=32;
/*
int PC_2[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};*/
//int LS[]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};
LS[0]=1;LS[1]=1;LS[2]=2;LS[3]=2;LS[4]=2;LS[5]=2;LS[6]=2;LS[7]=2;
LS[8]=1;LS[9]=2;LS[10]=2;LS[11]=2;LS[12]=2;LS[13]=2;LS[14]=2;LS[15]=1;
//unsigned char CONST1[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
CONST1[0]=0x80;CONST1[1]=0x40;CONST1[2]=0x20;CONST1[3]=0x10;
CONST1[4]=0x08;CONST1[5]=0x04;CONST1[6]=0x02;CONST1[7]=0x01;
//unsigned char CONST2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
CONST2[0]=0x7f;CONST2[1]=0xbf;CONST2[2]=0xdf;CONST2[3]=0xef;
CONST2[4]=0xf7;CONST2[5]=0xfb;CONST2[6]=0xfd;CONST2[7]=0xfe;
}
DES::~DES()
{
}
/**********Byte8To64Bit**********/
// Function Name: Byte8To64Bit
// 傳入?yún)?shù): Byte[8]
// 功能:將傳入的8bytes 轉為64bits (binary type)
// 傳出參數(shù):Bit[64]
// 返回值: void
/********************************/
void DES::Byte8To64Bit(unsigned char Byte[8],unsigned char Bit[64])
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
/* if((Bit[i] & CONST1[j]) == CONST1[j])
Byte[i*8+j]=0x01;
*/
//如果對應的位為1,則分別將對應的位置為0x01
//CONST1[i]==>0x80, 0x40, 0x20, 0x10, 0x08, 0x04,0x02,0x01
//Decimal 128 64 32 16 8 4 2 1
//Binary 111111111 11111111 111111 11111 1111 111 11 1
if((*(Byte+i) & *(CONST1+j)) == *(CONST1+j))
*(Bit+i*8+j) = 0x01;
}
}
}
/**********Bit64To8Byte**********/
// Function Name: Bit64To8Byte
// 傳入?yún)?shù): Bit[64]
// 功能:將傳入的64bits 轉為8bytes
// 傳出參數(shù):Byte[8]
// 返回值: void
/********************************/
void DES::Bit64To8Byte(unsigned char Bit[64],unsigned char Byte[8])
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(*(Bit+8*i+j) == 0x01)
*(Byte+i) |= *(CONST1+j);
else *(Byte+i) &= *(CONST2+j);
/*
if(Byte[8*i+j] == 0x01)
Bit[i] |= CONST1[j];
else Bit[i] &= CONST2[j];
*/
}
}
}
/**********BuildKey**********/
// Function Name: BuildKey
// 傳入?yún)?shù): origokey[8]
// 功能:由傳入的origokey經(jīng)過位移后得K1,K2...K16(每個key為48位),
// 存于key[i]中
// 傳出參數(shù):key[16][8]
// 返回值: void
/********************************/
void DES::BuildKey(unsigned char origokey[8],unsigned char key[16][8])
{
int i,j,k;
unsigned char Bit64[64];
unsigned char Swap_Bit[64];
unsigned char Key_Bit[16][64];
unsigned char C0[28],D0[28];
unsigned char c_tmp,d_tmp;
memset(Bit64,0,64);
memset(Swap_Bit,0,sizeof(Swap_Bit));
memset(Key_Bit,0,sizeof(Key_Bit));
memset(C0,0,28);
memset(D0,0,28);
Byte8To64Bit(origokey,Bit64);
//pc-1
/*
#ifdef DEBUG
printf("\n");
for(i=0;i<64;i++)
printf("%d",Bit64[i]);
printf("\n");
#endif
*/
// PC-1
for(i=0;i<56;i++)
{
if(i<28)
C0[i]=Bit64[PC_1[i]-1];
else
D0[i-28]=Bit64[PC_1[i]-1];
}
/*
#ifdef DEBUG
for(i=0;i<56;i++)
{
if(i<28)
printf("%d",C0[i]);
else printf("%d",D0[i-28]);
}
printf("\n");
#endif
*/
for(i=0;i<16;i++){
for(j=0;j<LS[i];j++){
c_tmp=C0[0];
d_tmp=D0[0];
for(k=0;k<27;k++)
{
C0[k]=C0[k+1];
D0[k]=D0[k+1];
}
C0[27]=c_tmp;
D0[27]=d_tmp;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -