aboutsummaryrefslogtreecommitdiff
path: root/CST 126/Homework2/Base64Converter.hpp
diff options
context:
space:
mode:
authorWesleyR23 <[email protected]>2024-05-15 18:51:42 -0700
committerGitHub <[email protected]>2024-05-15 18:51:42 -0700
commit0357df8c6f39014e6fa2838341be645590df6bca (patch)
tree46eb312fbb8f127a28ebd79ea68a3492db07e50d /CST 126/Homework2/Base64Converter.hpp
parentmerging develop after PR (diff)
downloadarchived-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.hpp117
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