Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.27 KB | None | 0 0
  1.  
  2. #include <math.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5.  
  6. int ehill(const char *msg, int sz_msg, const char *key, int sz_key, int *out) {
  7.  
  8.     int sz_block = sqrt(sz_key);
  9.     int sz_zeros;
  10.     int i, j;
  11.  
  12.     if(sz_block * sz_block != sz_key) {
  13.         printf("Incorrect key size\n");
  14.         return -1;
  15.     }
  16.  
  17.     if(sz_msg % sz_block == 0)
  18.         sz_zeros = 0;
  19.     else
  20.         sz_zeros = sz_block - sz_msg % sz_block;
  21.  
  22.     memset(out, 0, (sz_msg + sz_zeros)*sizeof(int));
  23.     printf(">>%d\n", (sz_msg + sz_zeros));
  24.  
  25.     for(i=0; i<sz_msg + sz_zeros; i++) {
  26.         char symb;
  27.  
  28.         if(i < sz_msg)
  29.             symb = msg[i];
  30.         else
  31.             symb = ' ';
  32.  
  33.         for(j=0; j<sz_block; j++) {
  34.             /* printf("symb '%c' in %d from %d\n", symb, sz_block*(i/sz_block) + j, (i%sz_block) + j*sz_block); */
  35.             out[sz_block*(i/sz_block) + j] += (symb * key[(i%sz_block) + j*sz_block]);
  36.             out[sz_block*(i/sz_block) + j] = out[sz_block*(i/sz_block) + j] % 257;
  37.         }
  38.     }
  39.  
  40.     printf(">>%d\n", sz_block*((i-1)/sz_block) + j);
  41.     return sz_msg + sz_zeros - 1; //sz_block*((i-1)/sz_block) + j;
  42. }
  43.  
  44.  
  45. int main(void) {
  46.     char msg[] = "Hello world\n";
  47.     char key[] = "1111222233334444";
  48.     int out[100];
  49.  
  50.     int r = ehill(msg, sizeof(msg)-1, key, sizeof(key)-1, out);
  51.  
  52.     for(; r!=-1; r--)
  53.         printf("%d ", (unsigned int)out[r]);
  54.     printf("\n");
  55.  
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement