c++ - 在不更改数据类型的情况下可逆地组合两个 uint32_t

标签 c++ integer encryption uint32-t

这是我的问题:我需要通过单个 uint32_t 传回两个 uint32_t(因为 API 的设置方式...)。我可以硬编码我需要的任何其他值来反转操作,但函数之间传递的参数需要保持单个 uint32_t。

如果我可以将两个 32 位整数移位成一个 64 位整数(如解释的 here ),这将是微不足道的,但编译器不会喜欢那样。我也看过数学 pairing functions ,但我不确定在这种情况下这是否是我所需要的。

我想过设置一个简单的密码:unint32_t 可以是密文,我可以对 key 进行硬编码。这是 example ,但这似乎有点矫枉过正。

这可能吗?

最佳答案

仅使用 32 位是不可能存储超过 32 位的信息的。这是信息论的一个基本结论。

如果您知道您只使用每个值的低 16 位,则可以将一个左移 16 位并以这种方式组合它们。但是,绝对没有办法将 64 位的信息(甚至 33 位)转化为 32 位的信息。

关于c++ - 在不更改数据类型的情况下可逆地组合两个 uint32_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169203/

相关文章:

c++ - 如何在 VS C++ 中使用 .tlb 类型创建接口(interface)方法?

python - 链接 : fatal error LNK1104: cannot open file 'python37_d.lib'

encryption - WebauthN 和 Yubikey 用于在浏览器中生成对称加密 key 。这个黑客安全吗?

c++ - 序列化公钥以通过网络发送

c++ - 类模板中不可能有默认的 lambda

c++ - 在tpp文件中声明模板成员函数

integer - 8 位、16 位、32 位处理器/微 Controller 中整数的大小是多少?

c - 基本C程序,巴比伦算法

android - 将文本设置为整数值

c# - crypt SHA-512 算法的说明 (c#)