#include #include #include #include "base64.h" size_t b64_encoded_size(size_t inlen) { size_t ret; ret = inlen; if (inlen % 3 != 0) ret += 3 - (inlen % 3); ret /= 3; ret *= 4; return ret; } char *b64_encode(char *in) { const char b64chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; size_t len = strlen(in); char *out; size_t elen; size_t i; size_t j; size_t v; if (in == NULL || len == 0) return NULL; elen = b64_encoded_size(len); out = malloc(elen+1); out[elen] = '\0'; for (i=0, j=0; i> 18) & 0x3F]; out[j+1] = b64chars[(v >> 12) & 0x3F]; if (i+1 < len) { out[j+2] = b64chars[(v >> 6) & 0x3F]; } else { out[j+2] = '='; } if (i+2 < len) { out[j+3] = b64chars[v & 0x3F]; } else { out[j+3] = '='; } } return out; } int main(int argc, char **argv) { (void)argc; (void)argv; char *data = "123456SO+PA=SOPA!"; char *enc; printf("data: '%s'\n", data); enc = b64_encode(data); printf("encoded: '%s'\n", enc); free(enc); return 0; }