Guest User

Untitled

a guest
Dec 20th, 2021
604
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. #include <time.h>
  6. #include <assert.h>
  7.  
  8. char *s[] = {
  9. #include "s.h"
  10. NULL
  11. };
  12.  
  13. int main(int argc, char **argv)
  14. {
  15.     int i, j, k, r, c, m = -1, t = 1;
  16.     for (c = 0; s[c]; c++)
  17.         ;
  18.     int l[c];
  19.     bzero(l, sizeof(l));
  20.     for (i = 0; i < c; i++) {
  21.         l[i] = strlen(s[i]);
  22.         if (l[i] > m)
  23.             m = l[i];
  24.     }
  25.  
  26.     int n = 4;
  27.     char K[n + 1];
  28.  
  29.  
  30.     unsigned char key[n][256];
  31.     for (j = 0; j < n; j++)
  32.         for (i = 0; i < 256; i++)
  33.             key[j][i] = i;
  34.  
  35.     srandom(time(NULL));
  36.  
  37.     for (i = 0; i < c; i++)
  38.         for (j = 0; j < l[i]; j++)
  39.             key[j % n][s[i][j]] = 0;
  40.  
  41.     for (k = 0; k < n; k++) {
  42.         for (i = 0, j = 0; i < 256; i++)
  43.             if (isprint(key[k][i]))
  44.                 key[k][j++] = key[k][i];
  45.         if (j < 1) {
  46.             printf("No suitable key found at step %d\n", k);
  47.             return 2;
  48.         }
  49.         K[k] = key[k][random() % j];
  50.     }
  51.     K[k] = 0;
  52.     printf("KEY IS %s\n", K);
  53.  
  54.     char e[m + 1], d[m + 1];
  55.     for (i = 0; i < c; i++) {
  56.         /* encode */
  57.         for (j = 0; j < l[i]; j++)
  58.             e[j] = s[i][j] ^ K[j % n];
  59.         e[j] = 0;
  60.  
  61.         /* no extra zeroes? */
  62.         assert(strlen(e) == l[i]);
  63.  
  64.         /* decode */
  65.         for (j = 0; j < l[i]; j++)
  66.             d[j] = e[j] ^ K[j % n];
  67.         d[j] = 0;
  68.  
  69.         assert(0 == strcmp(d, s[i]));
  70.     }
  71.  
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment