Created
February 13, 2015 14:24
-
-
Save clzola/90908b2e12b7c97f7ee5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
unsigned char* encrypt(char* data, size_t* len, int key) | |
{ | |
size_t i = 0; | |
*len = strlen(data); | |
unsigned char* encrypted_data = new unsigned char [ *len + 1 ]; | |
for(i = 0; i<*len; i++) { | |
encrypted_data[i] = ((unsigned char) data[i]) ^ key; | |
} | |
encrypted_data[i] = '\0'; | |
return encrypted_data; | |
} | |
char* decrypt(unsigned char* data, size_t len, int key) | |
{ | |
size_t i = 0; | |
char* decrypted_data = new char [ len + 1 ]; | |
for(i = 0; i<len; i++) { | |
decrypted_data[i] = ((char) data[i]) ^ key; | |
} | |
decrypted_data[i] = '\0'; | |
return decrypted_data; | |
} | |
static const unsigned char base64_table[] = | |
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | |
/** | |
* base64_encode - Base64 encode | |
* @src: Data to be encoded | |
* @len: Length of the data to be encoded | |
* @out_len: Pointer to output length variable, or %NULL if not used | |
* Returns: Allocated buffer of out_len bytes of encoded data, | |
* or %NULL on failure | |
* | |
* Caller is responsible for freeing the returned buffer. Returned buffer is | |
* nul terminated to make it easier to use as a C string. The nul terminator is | |
* not included in out_len. | |
*/ | |
unsigned char * base64_encode(const unsigned char *src, size_t len, size_t *out_len) | |
{ | |
unsigned char *out, *pos; | |
const unsigned char *end, *in; | |
size_t olen; | |
int line_len; | |
olen = len * 4 / 3 + 4; /* 3-byte blocks to 4-byte */ | |
olen += olen / 72; /* line feeds */ | |
olen++; /* nul termination */ | |
out = new unsigned char [olen]; | |
if (out == NULL) | |
return NULL; | |
end = src + len; | |
in = src; | |
pos = out; | |
line_len = 0; | |
while (end - in >= 3) { | |
*pos++ = base64_table[in[0] >> 2]; | |
*pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)]; | |
*pos++ = base64_table[((in[1] & 0x0f) << 2) | (in[2] >> 6)]; | |
*pos++ = base64_table[in[2] & 0x3f]; | |
in += 3; | |
line_len += 4; | |
if (line_len >= 72) { | |
*pos++ = '\n'; | |
line_len = 0; | |
} | |
} | |
if (end - in) { | |
*pos++ = base64_table[in[0] >> 2]; | |
if (end - in == 1) { | |
*pos++ = base64_table[(in[0] & 0x03) << 4]; | |
*pos++ = '='; | |
} else { | |
*pos++ = base64_table[((in[0] & 0x03) << 4) | | |
(in[1] >> 4)]; | |
*pos++ = base64_table[(in[1] & 0x0f) << 2]; | |
} | |
*pos++ = '='; | |
line_len += 4; | |
} | |
if (line_len) | |
*pos++ = '\n'; | |
*pos = '\0'; | |
if (out_len) | |
*out_len = pos - out; | |
return out; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment