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

📄 des.txt

📁 本DES算法
💻 TXT
📖 第 1 页 / 共 2 页
字号:
本DES算法,使用了效率很高的C完成。目前,国内知名企业的POS终端中,单DES算法,均是采用这个函数完成。函数经本站验证过,可以放心使用。
      #include "stdafx.h"
      int des(unsigned char *source,unsigned char * dest,unsigned char * inkey, 
      int flg);
      int _tmain(int argc, _TCHAR* argv[])
      {

      unsigned char s[65]="DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加abc";
      unsigned char d[65]={0};
      unsigned char k[11]="adsss";
      unsigned char m[65]={0};
      for(int i =0;i<8;i++)
      {
          des(&s[8*i],&d[8*i],k,0);
      }
      for(int i =0;i<8;i++)
      {
          des(&d[8*i],&m[8*i],k,1);
      }
      //des(s,d,k,0);
      //des(d,m,k2,1);
      //printf(d);

      char i;
      scanf("%c",&i);
      return 0;
      }

      /* ================================================================
      des()
      Description: DES algorithm,do encript or descript.
      ================================================================ */
      int des(unsigned char *source,unsigned char * dest,unsigned char * inkey, 
      int flg)
      {
      unsigned char bufout[64],
      kwork[56], worka[48], kn[48], buffer[64], key[64],
      nbrofshift, temp1, temp2;
      int valindex;
      register i, j, k, iter;
      /* INITIALIZE THE TABLES */
      /* Table - s1 */
      static unsigned char s1[4][16] = {
      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 };
      /* Table - s2 */
      static unsigned char s2[4][16] = {
      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 };
      /* Table - s3 */
      static unsigned char s3[4][16] = {
      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 };
      /* Table - s4 */
      static unsigned char s4[4][16] = {
      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 };
      /* Table - s5 */
      static 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 };
      /* Table - s6 */
      static 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 };
      /* Table - s7 */
      static 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 };
      /* Table - s8 */
      static 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 };

      /* Table - Shift */
      static unsigned char shift[16] = {
      1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 };

      /* Table - Binary */
      static unsigned char binary[64] = {
      0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1,
      0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1,
      1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1,
      1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1 };
      /* MAIN PROCESS */
      /* Convert from 64-bit key into 64-byte key */
      for (i = 0; i < 8; i++) {
      key[8*i] = ((j = *(inkey + i)) / 128) % 2;
      key[8*i+1] = (j / 64) % 2;
      key[8*i+2] = (j / 32) % 2;
      key[8*i+3] = (j / 16) % 2;
      key[8*i+4] = (j / 8) % 2;
      key[8*i+5] = (j / 4) % 2;
      key[8*i+6] = (j / 2) % 2;
      key[8*i+7] = j % 2;
      }
      /* Convert from 64-bit data into 64-byte data */
      for (i = 0; i < 8; i++) {
      buffer[8*i] = ((j = *(source + i)) / 128) % 2;
      buffer[8*i+1] = (j / 64) % 2;
      buffer[8*i+2] = (j / 32) % 2;
      buffer[8*i+3] = (j / 16) % 2;
      buffer[8*i+4] = (j / 8) % 2;
      buffer[8*i+5] = (j / 4) % 2;
      buffer[8*i+6] = (j / 2) % 2;
      buffer[8*i+7] = j % 2;
      }
      /* Initial Permutation of Data */
      bufout[ 0] = buffer[57];
      bufout[ 1] = buffer[49];
      bufout[ 2] = buffer[41];
      bufout[ 3] = buffer[33];
      bufout[ 4] = buffer[25];
      bufout[ 5] = buffer[17];
      bufout[ 6] = buffer[ 9];
      bufout[ 7] = buffer[ 1];
      bufout[ 8] = buffer[59];
      bufout[ 9] = buffer[51];
      bufout[10] = buffer[43];
      bufout[11] = buffer[35];
      bufout[12] = buffer[27];
      bufout[13] = buffer[19];
      bufout[14] = buffer[11];
      bufout[15] = buffer[ 3];
      bufout[16] = buffer[61];
      bufout[17] = buffer[53];
      bufout[18] = buffer[45];
      bufout[19] = buffer[37];
      bufout[20] = buffer[29];
      bufout[21] = buffer[21];
      bufout[22] = buffer[13];
      bufout[23] = buffer[ 5];
      bufout[24] = buffer[63];
      bufout[25] = buffer[55];
      bufout[26] = buffer[47];
      bufout[27] = buffer[39];
      bufout[28] = buffer[31];
      bufout[29] = buffer[23];
      bufout[30] = buffer[15];
      bufout[31] = buffer[ 7];
      bufout[32] = buffer[56];
      bufout[33] = buffer[48];
      bufout[34] = buffer[40];
      bufout[35] = buffer[32];
      bufout[36] = buffer[24];
      bufout[37] = buffer[16];
      bufout[38] = buffer[ 8];
      bufout[39] = buffer[ 0];
      bufout[40] = buffer[58];
      bufout[41] = buffer[50];
      bufout[42] = buffer[42];
      bufout[43] = buffer[34];
      bufout[44] = buffer[26];
      bufout[45] = buffer[18];
      bufout[46] = buffer[10];
      bufout[47] = buffer[ 2];
      bufout[48] = buffer[60];
      bufout[49] = buffer[52];
      bufout[50] = buffer[44];
      bufout[51] = buffer[36];
      bufout[52] = buffer[28];
      bufout[53] = buffer[20];
      bufout[54] = buffer[12];
      bufout[55] = buffer[ 4];
      bufout[56] = buffer[62];
      bufout[57] = buffer[54];
      bufout[58] = buffer[46];
      bufout[59] = buffer[38];
      bufout[60] = buffer[30];
      bufout[61] = buffer[22];
      bufout[62] = buffer[14];
      bufout[63] = buffer[ 6];
      /* Initial Permutation of Key */
      kwork[ 0] = key[56];
      kwork[ 1] = key[48];
      kwork[ 2] = key[40];
      kwork[ 3] = key[32];
      kwork[ 4] = key[24];
      kwork[ 5] = key[16];
      kwork[ 6] = key[ 8];
      kwork[ 7] = key[ 0];
      kwork[ 8] = key[57];
      kwork[ 9] = key[49];
      kwork[10] = key[41];
      kwork[11] = key[33];
      kwork[12] = key[25];
      kwork[13] = key[17];
      kwork[14] = key[ 9];
      kwork[15] = key[ 1];
      kwork[16] = key[58];
      kwork[17] = key[50];
      kwork[18] = key[42];
      kwork[19] = key[34];
      kwork[20] = key[26];
      kwork[21] = key[18];
      kwork[22] = key[10];
      kwork[23] = key[ 2];
      kwork[24] = key[59];
      kwork[25] = key[51];
      kwork[26] = key[43];
      kwork[27] = key[35];
      kwork[28] = key[62];
      kwork[29] = key[54];
      kwork[30] = key[46];
      kwork[31] = key[38];
      kwork[32] = key[30];
      kwork[33] = key[22];
      kwork[34] = key[14];
      kwork[35] = key[ 6];
      kwork[36] = key[61];
      kwork[37] = key[53];
      kwork[38] = key[45];
      kwork[39] = key[37];
      kwork[40] = key[29];
      kwork[41] = key[21];
      kwork[42] = key[13];
      kwork[43] = key[ 5];
      kwork[44] = key[60];
      kwork[45] = key[52];
      kwork[46] = key[44];
      kwork[47] = key[36];
      kwork[48] = key[28];
      kwork[49] = key[20];
      kwork[50] = key[12];
      kwork[51] = key[ 4];
      kwork[52] = key[27];
      kwork[53] = key[19];
      kwork[54] = key[11];
      kwork[55] = key[ 3];
      /* 16 Iterations */
      for (iter = 1; iter < 17; iter++) {
      for (i = 0; i < 32; i++)
      {
          buffer[i] = bufout[32+i];
      }
      /* Calculation of F(R, K) */
      /* Permute - E */
      worka[ 0] = buffer[31];
      worka[ 1] = buffer[ 0];
      worka[ 2] = buffer[ 1];
      worka[ 3] = buffer[ 2];
      worka[ 4] = buffer[ 3];
      worka[ 5] = buffer[ 4];
      worka[ 6] = buffer[ 3];
      worka[ 7] = buffer[ 4];
      worka[ 8] = buffer[ 5];
      worka[ 9] = buffer[ 6];
      worka[10] = buffer[ 7];
      worka[11] = buffer[ 8];
      worka[12] = buffer[ 7];
      worka[13] = buffer[ 8];
      worka[14] = buffer[ 9];
      worka[15] = buffer[10];
      worka[16] = buffer[11];
      worka[17] = buffer[12];
      worka[18] = buffer[11];
      worka[19] = buffer[12];
      worka[20] = buffer[13];
      worka[21] = buffer[14];
      worka[22] = buffer[15];
      worka[23] = buffer[16];
      worka[24] = buffer[15];
      worka[25] = buffer[16];
      worka[26] = buffer[17];
      worka[27] = buffer[18];
      worka[28] = buffer[19];
      worka[29] = buffer[20];
      worka[30] = buffer[19];

⌨️ 快捷键说明

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