memcpy

cryptojunk

Apr 5th, 2012
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.14 KB | None | 0 0
  1. u32 gen_pseudo_random()
  2. {
  3.     struct timeval tv;
  4.     gettimeofday(&tv, NULL);
  5.     return (u32)((tv.tv_sec / 1000) + (tv.tv_usec * 1000));
  6. }
  7.  
  8. char *grab_random(u16 len)
  9. {
  10.     char *ret;
  11.     ret = malloc(len + 1);
  12.     while (len--)
  13.         ret[len] = ((gen_pseudo_random() % 74) + 48);
  14.  
  15.     return ret;
  16. }
  17.  
  18. char *n_encrypt(char *str)
  19. {
  20.     register u16 cnt, str_len, kc, spos, key_len;
  21.     char *key, *ret, *ck;
  22.    
  23.     /* calculate the str_lenes */
  24.     str_len = strlen(str);
  25.     key_len = ( (str_len / 2) ) - 1;
  26.  
  27.     /* allocate return variable */
  28.     ret = malloc(str_len + 3+ key_len);
  29.    
  30.     /* get a key */
  31.     key = grab_random(key_len);
  32.    
  33.     /* put the input into the register */
  34.     memcpy(ret, str, str_len);
  35.     /* encrypt the string */
  36.     kc = 0;
  37.     for (cnt = 0; cnt < str_len; cnt++) {
  38.         ret[cnt] ^= ((key[kc] & 5) + 2);
  39.         kc = ((kc >= (key_len-1)) ? (0) : (kc + 1));
  40.     }
  41.    
  42.     /* hide the key */
  43.     kc = key_len;
  44.     spos = 0;
  45.     printf("%s: String: %s\n",__func__,ret);
  46.     while (kc--) {
  47.         memmove(&ret[spos + 1], &ret[spos], str_len);
  48.         ret[spos] = key[kc];
  49.         spos += 2;
  50.     }
  51.    
  52.     /* add the key length */
  53.     ck = malloc(3);
  54.     memmove(&ret[2], ret, str_len + key_len);
  55.     sprintf(ck, "%d", key_len);
  56.     memcpy(ret, ck, 2);
  57.  
  58.     printf("%s: Key: %s\n",__func__,key);
  59.  
  60.     free(key);
  61.     return ret;
  62. }
  63.  
  64. char *n_decrypt(char *str)
  65. {
  66.     register u16 cnt, str_len, kc, spos, key_len;
  67.     char *key, *ret, *ck;
  68.    
  69.     /* get the key length */
  70.     ck = malloc(3);
  71.     memcpy(ck, &str[0], 2);
  72.     key_len = atoi(ck);
  73.     free(ck);
  74.  
  75.     /* calculate sizes and allocate */
  76.     str_len = strlen(str) - 2;
  77.     key = malloc(key_len + 1);
  78.     ret = malloc(str_len + 1 + key_len);
  79.    
  80.     /* put the input into the register */
  81.     memcpy(ret, &str[2], str_len);
  82.  
  83.     /* extract the key from the buffer */
  84.     kc = key_len;
  85.     spos = 0;
  86.     while (kc--) {
  87.         key[kc] = ret[spos];
  88.         memmove(&ret[spos], &ret[spos + 1], str_len);
  89.         spos++;
  90.     }
  91.  
  92.     printf("%s: Key: %s\n",__func__,key);
  93.     printf("%s: String: %s\n",__func__,ret);
  94.  
  95.     /* decrypt the string and return */
  96.     kc = 0;
  97.     for (cnt = 0; cnt < str_len - key_len; cnt++) {
  98.         ret[cnt] ^= ((key[kc] & 5) + 2);
  99.         kc = ((kc >= (key_len-1)) ? (0) : (kc + 1));
  100.     }
  101.    
  102.     free(key);
  103.     return ret;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment