⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 desok.h

📁 c语言写的des(430单片机) 用430单片机实现的DES加密系统
💻 H
字号:
//------------------------------------------------------------//
//------------------ data define for Des use   ---------------//
//------------------------ 2003/11/21 ------------------------//
//---------------------- Wang Qingshan -----------------------//
//------------------------------------------------------------//
//根据运算时节约和方便计算,对其中的一些表作了改写。
//常数SubKey数组为Computer的16个子密钥,可在计算时校验。

#define uchar unsigned char
#define uint unsigned int
#define lint long int
#define nop _NOP()

int DeiDaiLoop;                 //2
//uchar Subkey[6];                //6
uchar SubKey[16][6];            //96
uchar AData[4]={0};             //4
uchar BData[4]={0};             //4
uchar EX48bit[6]={0};           //6
uchar SBox48[8]={0};            //8
uchar SBox32[4]={0};            //4
uchar PlantText[8]="learning";  //8
uchar i,j;                      //2
uchar KeyText[8]="computer";    //8
uchar Chiper[8];                //8
                      //total use:150(SubKey in RAM)
                      //           60(SubKey store in Exterior)

/*
//生成的16个子密钥,可以作子密钥的计算验证,为的节省RAM,建议将子密钥存到EEPROM中,运算中一个一个的提取。
const uchar SubKey[16][6]={
                    { 15, 125, 119,  11, 224,  25},
                    {  7, 125, 111, 169,  45,  33},
                    { 47, 127, 110,  20,  96, 167},
                    {103, 239,  78,  88,  23, 225},
                    {119, 235, 238, 100, 162, 137},
                    {247, 203, 218, 209, 132, 194},
                    {244, 203, 223,  99, 195,   0},
                    {253, 154, 219,  10, 224, 114},
                    {248, 218, 219,  34, 169,  42},
                    {252, 158, 187, 144,  37,  55},
                    {248, 182, 179,  22,  59, 129},
                    {218, 182, 189,  80,  34, 252},
                    {187, 181, 181, 241, 154,   1},
                    {203, 117, 245,   1, 194, 142},
                    {159, 125, 101, 203,  81,  32},
                    {143, 125, 116, 128,  65, 122}
                          };
*/
//初始置换IP
const uchar IP[64]={                                  
                    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,
                    56,  48,  40,  32,  24,  16,   8,  0,
                    58,  50,  42,  34,  26,  18,  10,  2,
                    60,  52,  44,  36,  28,  20,  12,  4,
                    62,  54,  46,  38,  30,  22,  14,  6
                   };
//初始置换的逆置换IP-1
const uchar ReIP[64]={
                    32,   0,  40,   8,  48,  16,  56,  24,
                    33,   1,  41,   9,  49,  17,  57,  25,
                    34,   2,  42,  10,  50,  18,  58,  26,
                    35,   3,  43,  11,  51,  19,  59,  27,
                    36,   4,  44,  12,  52,  20,  60,  28,
                    37,   5,  45,  13,  53,  21,  61,  29,
                    38,   6,  46,  14,  54,  22,  62,  30,
                    39,   7,  47,  15,  55,  23,  63,  31
                   };
//密钥的第一次选位
const uchar PC1[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
                   };
//密钥的第二次选位
const uchar PC2[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,
                    44,  55,  34,  40,  50,  58,
                    33,  43,  54,  48,  36,  51,
                    47,  52,  42,  59,  37,  56,
                    49,  45,  53,  39,  32,  35
                    };

const uchar Exp[48]={
                    31,  0,   1,   2,   3,   4,
                     3,  4,   5,   6,   7,   8,
                     7,  8,   9,  10,  11,  12,
                    11, 12,  13,  14,  15,  16,
                    15, 16,  17,  18,  19,  20,
                    19, 20,  21,  22,  23,  24,
                    23, 24,  25,  26,  27,  28,
                    27, 28,  29,  30,  31,  0        //0?????
                    };
                    //8个S-Box数组
const uchar S[8][64]={
                    {//S1
                    14,  4, 13,  1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7, 
                     0, 15,  7,  4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5,  3,  8, 
                     4,  1, 14,  8, 13,  6,  2, 11, 15, 12,  9,  7,  3, 10,  5,  0, 
                    15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13 
                    },
                    {//S2
                    15,  1,  8, 14,  6, 11,  3,  4,  9,  7,  2, 13, 12,  0,  5, 10, 
                     3, 13,  4,  7, 15,  2,  8, 14, 12,  0,  1, 10,  6,  9, 11,  5, 
                     0, 14,  7, 11, 10,  4, 13,  1,  5,  8, 12,  6,  9,  3,  2, 15, 
                    13,  8, 10,  1,  3, 15,  4,  2, 11,  6,  7, 12,  0,  5, 14,  9 
                    },
                    {//S3
                    10,  0,  9, 14,  6,  3, 15,  5,  1, 13, 12,  7, 11,  4,  2,  8, 
                    13,  7,  0,  9,  3,  4,  6, 10,  2,  8,  5, 14, 12, 11, 15,  1, 
                    13,  6,  4,  9,  8, 15,  3,  0, 11,  1,  2, 12,  5, 10, 14,  7, 
                     1, 10, 13,  0,  6,  9,  8,  7,  4, 15, 14,  3, 11,  5,  2, 12 
                    },
                    {//S4
                     7, 13, 14,  3,  0,  6,  9, 10,  1,  2,  8,  5, 11, 12,  4, 15, 
                    13,  8, 11,  5,  6, 15,  0,  3,  4,  7,  2, 12,  1, 10, 14,  9, 
                    10,  6,  9,  0, 12, 11,  7, 13, 15,  1,  3, 14,  5,  2,  8,  4, 
                     3, 15,  0,  6, 10,  1, 13,  8,  9,  4,  5, 11, 12,  7,  2, 14 
                    },
                    {//S5
                     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
                    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
                     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
                    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 
                    }
                    };
//S-box结果压缩换位表
const uchar SPc[32]={
                    12,  5, 16, 23, 31,  8, 24, 19,
                     3, 13, 21, 26,  7, 18, 29, 10,
                     2,  4, 20, 14, 28, 25,  1, 11,
                    17, 15, 30,  6, 22,  9,  0, 27
                    };
//16个字密钥的移位次数
const uchar LShift[16]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};
//字节中的位位置
const uchar Position[8]={1,2,4,8,16,32,64,128};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -