Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- u32 gen_pseudo_random()
- {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return (u32)((tv.tv_sec / 1000) + (tv.tv_usec * 1000));
- }
- char *grab_random(u16 len)
- {
- char *ret;
- ret = malloc(len + 1);
- while (len--)
- ret[len] = ((gen_pseudo_random() % 74) + 48);
- return ret;
- }
- char *n_encrypt(char *str)
- {
- register u16 cnt, str_len, kc, spos, key_len;
- char *key, *ret, *ck;
- /* calculate the str_lenes */
- str_len = strlen(str);
- key_len = ( (str_len / 2) ) - 1;
- /* allocate return variable */
- ret = malloc(str_len + 3+ key_len);
- /* get a key */
- key = grab_random(key_len);
- /* put the input into the register */
- memcpy(ret, str, str_len);
- /* encrypt the string */
- kc = 0;
- for (cnt = 0; cnt < str_len; cnt++) {
- ret[cnt] ^= ((key[kc] & 5) + 2);
- kc = ((kc >= (key_len-1)) ? (0) : (kc + 1));
- }
- /* hide the key */
- kc = key_len;
- spos = 0;
- printf("%s: String: %s\n",__func__,ret);
- while (kc--) {
- memmove(&ret[spos + 1], &ret[spos], str_len);
- ret[spos] = key[kc];
- spos += 2;
- }
- /* add the key length */
- ck = malloc(3);
- memmove(&ret[2], ret, str_len + key_len);
- sprintf(ck, "%d", key_len);
- memcpy(ret, ck, 2);
- printf("%s: Key: %s\n",__func__,key);
- free(key);
- return ret;
- }
- char *n_decrypt(char *str)
- {
- register u16 cnt, str_len, kc, spos, key_len;
- char *key, *ret, *ck;
- /* get the key length */
- ck = malloc(3);
- memcpy(ck, &str[0], 2);
- key_len = atoi(ck);
- free(ck);
- /* calculate sizes and allocate */
- str_len = strlen(str) - 2;
- key = malloc(key_len + 1);
- ret = malloc(str_len + 1 + key_len);
- /* put the input into the register */
- memcpy(ret, &str[2], str_len);
- /* extract the key from the buffer */
- kc = key_len;
- spos = 0;
- while (kc--) {
- key[kc] = ret[spos];
- memmove(&ret[spos], &ret[spos + 1], str_len);
- spos++;
- }
- printf("%s: Key: %s\n",__func__,key);
- printf("%s: String: %s\n",__func__,ret);
- /* decrypt the string and return */
- kc = 0;
- for (cnt = 0; cnt < str_len - key_len; cnt++) {
- ret[cnt] ^= ((key[kc] & 5) + 2);
- kc = ((kc >= (key_len-1)) ? (0) : (kc + 1));
- }
- free(key);
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment