12 void Base64::encode(
const string& decodedString,
string& encodedString) {
14 string dictionary =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
15 int val = 0, valb = -6;
16 for (uint8_t c: decodedString) {
20 encodedString.push_back(dictionary[(val >> valb) & 0x3F]);
24 if (valb > -6) encodedString.push_back(dictionary[((val << 8) >> (valb + 8)) & 0x3F]);
25 while (encodedString.size() % 4) encodedString.push_back(
'=');
28 void Base64::encode(
const vector<uint8_t>& decodedData,
string& encodedString) {
30 string dictionary =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
31 int val = 0, valb = -6;
32 for (uint8_t c: decodedData) {
36 encodedString.push_back(dictionary[(val >> valb) & 0x3F]);
40 if (valb > -6) encodedString.push_back(dictionary[((val << 8) >> (valb + 8)) & 0x3F]);
41 while (encodedString.size() % 4) encodedString.push_back(
'=');
46 string dictionary =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
47 std::vector<int> T(256, -1);
48 for (
int i = 0; i < 64; i++) T[dictionary[i]] = i;
49 int val = 0, valb = -8;
50 for (uint8_t c: encodedString) {
51 if (T[c] == -1)
break;
52 val = (val << 6) + T[c];
55 decodedString.push_back(
char((val >> valb) & 0xFF));
61 void Base64::decode(
const string& encodedString, vector<uint8_t>& decodedData) {
63 string dictionary =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
64 std::vector<int> T(256, -1);
65 for (
int i = 0; i < 64; i++) T[dictionary[i]] = i;
66 int val = 0, valb = -8;
67 for (uint8_t c: encodedString) {
68 if (T[c] == -1)
break;
69 val = (val << 6) + T[c];
72 decodedData.push_back(
char((val >> valb) & 0xFF));
Base64 encoding/decoding class.
static const string decode(const string &encodedString)
Decodes an base64 encoded string.
static const string encode(const string &decodedString)
Encodes an string to base 64 string.