diff options
| author | WesleyR23 <[email protected]> | 2024-05-15 18:51:42 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-05-15 18:51:42 -0700 |
| commit | 0357df8c6f39014e6fa2838341be645590df6bca (patch) | |
| tree | 46eb312fbb8f127a28ebd79ea68a3492db07e50d /CST 126/Homework2/Base64Converter.hpp | |
| parent | merging develop after PR (diff) | |
| download | archived-homework-1-wesleyr23-0357df8c6f39014e6fa2838341be645590df6bca.tar.xz archived-homework-1-wesleyr23-0357df8c6f39014e6fa2838341be645590df6bca.zip | |
Homework2 (#3)
* Lab1
* updating
* commiting for merge into develop
Diffstat (limited to 'CST 126/Homework2/Base64Converter.hpp')
| -rw-r--r-- | CST 126/Homework2/Base64Converter.hpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/CST 126/Homework2/Base64Converter.hpp b/CST 126/Homework2/Base64Converter.hpp new file mode 100644 index 0000000..73980ed --- /dev/null +++ b/CST 126/Homework2/Base64Converter.hpp @@ -0,0 +1,117 @@ +#ifndef BASE64_CONVERTER +#define BASE64_CONVERTER + +#include <iostream> +#include <string> +#include <vector> + +using std::string; +using std::vector; + +typedef unsigned char UC; +typedef unsigned int UI; +#define EXTRA '^' +#define MASK1 0xfc +#define MASK2 0x03 +#define MASK3 0xf0 +#define MASK4 0x0f +#define MASK5 0xc0 +#define MASK6 0x3f +#define MASK7 0x30 +#define MASK8 0x3c + +const string characterMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +inline string Base64Encode(UC const* buffer, size_t& size) +{ + string encoded = ""; + + UI i = 0, + j = 0, + k = 0; + + UC temp_a_3[3], + temp_4[4]; + + for (i = 0; i < size; i += 3) { + + for (j = i, k = 0; j < size && j < i + 3; j++) + temp_a_3[k++] = *(buffer++); + + for (; k < 3; k++) + temp_a_3[k] = '\0'; + + temp_4[0] = (temp_a_3[0] & MASK1) >> 2; + temp_4[1] = ((temp_a_3[0] & MASK2) << 4) + ((temp_a_3[1] & MASK3) >> 4); + temp_4[2] = ((temp_a_3[1] & MASK4) << 2) + ((temp_a_3[2] & MASK5) >> 6); + temp_4[3] = temp_a_3[2] & MASK6; + + for (j = i, k = 0; j < size + 1 && j < i + 4; j++, k++) + encoded += characterMap[temp_4[k]]; + + for (; k < 4; k++) + encoded += EXTRA; + } + + return encoded; +} + +inline vector<UC> Base64Decoder(string const& encoded) +{ + UI i = 0, + j = 0, + k = 0, + in_len = encoded.size(); + + UC temp_a_3[3], + temp_4[4]; + + vector<UC> decoded; + + for (i = 0; i < in_len; i += 4) { + + for (j = i, k = 0; j < i + 4 && encoded[j] != EXTRA; j++) + temp_4[k++] = characterMap.find(encoded[j]); + + for (; k < 4; k++) + temp_4[k++] = '\0'; + + temp_a_3[0] = (temp_4[0] << 2) + ((temp_4[1] & MASK7) >> 4); + temp_a_3[1] = ((temp_4[1] & MASK4) << 4) + ((temp_4[2] & MASK8) >> 2); + temp_a_3[2] = ((temp_4[2] & MASK2) << 6) + temp_4[3]; + + for (j = i, k = 0; k < 3 && encoded[j + 1] != EXTRA; j++, k++) + decoded.push_back(temp_a_3[k]); + } + + return decoded; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#endif
\ No newline at end of file |