Skip to content

Instantly share code, notes, and snippets.

@clzola
Created February 13, 2015 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save clzola/90908b2e12b7c97f7ee5 to your computer and use it in GitHub Desktop.
Save clzola/90908b2e12b7c97f7ee5 to your computer and use it in GitHub Desktop.
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