Sense

RSS

base64 in c++

Implementation of Base64 in c++

base64.h:

#ifndef _BASE64_H_
#define _BASE64_H_

#include <vector>
#include <string>
typedef unsigned char BYTE;

std::string base64_encode(BYTE const* buf, unsigned int bufLen);
std::vector<BYTE> base64_decode(std::string const&);

#endif

base64.cpp:

#include “base64.h”
#include <iostream>

static const std::string base64_chars =
“ABCDEFGHIJKLMNOPQRSTUVWXYZ”
“abcdefghijklmnopqrstuvwxyz”
“0123456789+/”;


static inline bool is_base64(BYTE c) {
return (isalnum(c) || (c == ‘+’) || (c == ‘/’));
}

std::string base64_encode(BYTE const* buf, unsigned int bufLen) {
std::string ret;
int i = 0;
int j = 0;
BYTE char_array_3[3];
BYTE char_array_4[4];

while (bufLen—) {
char_array_3[i++] = *(buf++);
if (i == 3) {
char_array_4[0] = (char_array_3[0] & 0xfc) » 2;
char_array_4[1] = ((char_array_3[0] & 0x03) « 4) + ((char_array_3[1] & 0xf0) » 4);
char_array_4[2] = ((char_array_3[1] & 0x0f) « 2) + ((char_array_3[2] & 0xc0) » 6);
char_array_4[3] = char_array_3[2] & 0x3f;

for(i = 0; (i <4) ; i++)
ret += base64_chars[char_array_4[i]];
i = 0;
}
}

if (i)
{
for(j = i; j < 3; j++)
char_array_3[j] = ‘\0’;

char_array_4[0] = (char_array_3[0] & 0xfc) » 2;
char_array_4[1] = ((char_array_3[0] & 0x03) « 4) + ((char_array_3[1] & 0xf0) » 4);
char_array_4[2] = ((char_array_3[1] & 0x0f) « 2) + ((char_array_3[2] & 0xc0) » 6);
char_array_4[3] = char_array_3[2] & 0x3f;

for (j = 0; (j < i + 1); j++)
ret += base64_chars[char_array_4[j]];

while((i++ < 3))
ret += ‘=’;
}

return ret;
}

std::vector<BYTE> base64_decode(std::string const& encoded_string) {
int in_len = encoded_string.size();
int i = 0;
int j = 0;
int in_ = 0;
BYTE char_array_4[4], char_array_3[3];
std::vector<BYTE> ret;

while (in_len— && ( encoded_string[in_] != ‘=’) && is_base64(encoded_string[in_])) {
char_array_4[i++] = encoded_string[in_]; in_++;
if (i ==4) {
for (i = 0; i <4; i++)
char_array_4[i] = base64_chars.find(char_array_4[i]);

char_array_3[0] = (char_array_4[0] « 2) + ((char_array_4[1] & 0x30) » 4);
char_array_3[1] = ((char_array_4[1] & 0xf) « 4) + ((char_array_4[2] & 0x3c) » 2);
char_array_3[2] = ((char_array_4[2] & 0x3) « 6) + char_array_4[3];

for (i = 0; (i < 3); i++)
ret.push_back(char_array_3[i]);
i = 0;
}
}

if (i) {
for (j = i; j <4; j++)
char_array_4[j] = 0;

for (j = 0; j <4; j++)
char_array_4[j] = base64_chars.find(char_array_4[j]);

char_array_3[0] = (char_array_4[0] « 2) + ((char_array_4[1] & 0x30) » 4);
char_array_3[1] = ((char_array_4[1] & 0xf) « 4) + ((char_array_4[2] & 0x3c) » 2);
char_array_3[2] = ((char_array_4[2] & 0x3) « 6) + char_array_4[3];

for (j = 0; (j < i - 1); j++) ret.push_back(char_array_3[j]);
}

return ret;
}

Usage:

std::vector<BYTE> myData;

std::string encodedData = base64_encode(&myData[0], myData.size());
std::vector<BYTE> decodedData = base64_decode(encodedData);

shanerbarnes:

Aalto Talk with Linux Torvalds

norweeg:

ahhh!  Room to stretch!  24GB total memory, 12GB physical, and 12GB swap

norweeg:

ahhh!  Room to stretch!  24GB total memory, 12GB physical, and 12GB swap

Fixing ” Temporary failure resolving ‘us.archive.ubuntu.com’” in Ubuntu, Vagrant

suranyami:

April 30 2012, 6:05 PM  by David Parry

when trying to run this:

sudo apt-get update

on Vagrant with Ubuntu, I kept getting the following error:

Temporary failure resolving 'us.archive.ubuntu.com

The solution was to add sensible DNS entries in:

/etc/resolv.conf

This is the config for Google’s DNS servers:

nameserver 8.8.8.8
nameserver 8.8.4.4
mattyohsofein:

When sleep fails, install BackTrack 5 and begin learning how to properly use it. #backtrack #network #security #hacking #linux #computer #5r3

mattyohsofein:

When sleep fails, install BackTrack 5 and begin learning how to properly use it. #backtrack #network #security #hacking #linux #computer #5r3

: One last thing before I go to sleep

jodyforthepresidentofsomeartclub:

As much as I like and respect the guy, I don’t think Richard Stallman’s vision of a world of completely free-as-in-freedom software (and hardware) can become a reality. Even discounting the fact that democratizing and opening up digital technology does, at very best, only surface improvements that…