Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <time.h>
- #include <assert.h>
- char *s[] = {
- #include "s.h"
- NULL
- };
- int main(int argc, char **argv)
- {
- int i, j, k, r, c, m = -1, t = 1;
- for (c = 0; s[c]; c++)
- ;
- int l[c];
- bzero(l, sizeof(l));
- for (i = 0; i < c; i++) {
- l[i] = strlen(s[i]);
- if (l[i] > m)
- m = l[i];
- }
- int n = 4;
- char K[n + 1];
- unsigned char key[n][256];
- for (j = 0; j < n; j++)
- for (i = 0; i < 256; i++)
- key[j][i] = i;
- srandom(time(NULL));
- for (i = 0; i < c; i++)
- for (j = 0; j < l[i]; j++)
- key[j % n][s[i][j]] = 0;
- for (k = 0; k < n; k++) {
- for (i = 0, j = 0; i < 256; i++)
- if (isprint(key[k][i]))
- key[k][j++] = key[k][i];
- if (j < 1) {
- printf("No suitable key found at step %d\n", k);
- return 2;
- }
- K[k] = key[k][random() % j];
- }
- K[k] = 0;
- printf("KEY IS %s\n", K);
- char e[m + 1], d[m + 1];
- for (i = 0; i < c; i++) {
- /* encode */
- for (j = 0; j < l[i]; j++)
- e[j] = s[i][j] ^ K[j % n];
- e[j] = 0;
- /* no extra zeroes? */
- assert(strlen(e) == l[i]);
- /* decode */
- for (j = 0; j < l[i]; j++)
- d[j] = e[j] ^ K[j % n];
- d[j] = 0;
- assert(0 == strcmp(d, s[i]));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment