所以我现在正在研究 C++ 中的加密/解密方法。它接受一个 std::string 作为输入(加上一个将用于加密消息的“ key ”),并生成一个 std::string 输出,其中表示加密后的字符串。
在加密过程中,我将 std::string
转换为 uint16_t
数组,并对其进行一些计算,作为加密的一部分。原因很简单,uint_16_t
值比 char
提供了更多的空间来通过算法加密原始值。
问题是,为了将加密消息作为 std::string
返回,我需要以某种方式将 uint_16_t
值数组转换为可读的内容(即是适合 char
数组而不溢出的东西)。为此,我认为我可以使用 Base64,但我发现的所有 Base64 实现仅采用 std::string
或 char*
作为输入(8 位/元素)。显然,如果我将 uint16_t 数组提供给它,我将永远无法取回原始值,因为 base64 函数在转换之前将其转换为 8 位。
这是我的问题:有谁知道一种将 uint16_t
数组编码为可打印字符串(如 base64)的方法,并且在不丢失任何数据的情况下返回?
我知道我必须获取数据的字节才能使用 base64,但我不知道该怎么做。
感谢您提前提供的任何帮助!
最佳答案
您可以使用base-n迷你库,提供通用的、基于迭代器的 I/O。
以下代码按预期将“1 2 3 4 65535”输出到标准输出:
uint16_t arr[] { 1, 2, 3, 4, 65535 };
const int len = sizeof(arr)/sizeof(arr[0]);
std::string encoded;
bn::encode_b64(arr, arr + len, std::back_inserter(encoded));
uint16_t out[len] { 0 };
bn::decode_b64(encoded.begin(), encoded.end(), out);
for (auto c : out) {
std::cout << c << " ";
}
强制披露:我是该库的作者
关于c++ - 如何将 16 位值数组转换为 base64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25005363/