c++ - 如何将 16 位值数组转换为 base64?

标签 c++ arrays string encryption base64

所以我现在正在研究 C++ 中的加密/解密方法。它接受一个 std::string 作为输入(加上一个将用于加密消息的“ key ”),并生成一个 std::string 输出,其中表示加密后的字符串。

在加密过程中,我将 std::string 转换为 uint16_t 数组,并对其进行一些计算,作为加密的一部分。原因很简单,uint_16_t 值比 char 提供了更多的空间来通过算法加密原始值。

问题是,为了将加密消息作为 std::string 返回,我需要以某种方式将 uint_16_t 值数组转换为可读的内容(即是适合 char 数组而不溢出的东西)。为此,我认为我可以使用 Base64,但我发现的所有 Base64 实现仅采用 std::stringchar* 作为输入(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/

相关文章:

Java通过数组访问对象

c - 依次填充缓冲区

python - 正则表达式从以 _ 和 _ 下划线后的 str 结尾的字符串中获取数字

c++ - reference_wrappers 的容器(需要比较运算符?)

c++ - 源代码中的注释

c++ - 您会为经验丰富的程序员推荐什么 C++ 教程,该程序员对该语言有一些零散的了解?

Java 数组搜索循环

PHP If 语句混淆

string - Elasticsearch.NET搜索记录以字符串字段(NEST)中的值开头

c++ - 如何在 Visual Studio 汇编程序输出中分解名称?