c++ - C++ 宏中的随机数

标签 c++ random macros obfuscation

<分区>

我正在开发一种加密游戏数据文件的方法,该方法将用于我正在创建的游戏引擎中。游戏数据文件将使用私钥加密,并在加载到游戏引擎后解密。

私钥将在引擎中手动设置(作为常量),以便将其编译到引擎中。然而,诀窍在于对其进行混淆处理,这样普通的 Joe Bloggs 就无法(轻松地)通过反汇编和逆向工程代码找到 key 。

struct Example {
    u_int8_t random1;
    u_int64_t segment31;
    u_int8_t random2;
    u_int8_t random3;
    u_int64_t segment3;
    u_int64_t segment14;
    // Etc
};

我的想法是将 key 存储在与随机生成的字节混杂在一起的段中。我的问题是:

有没有办法在 C++ 宏中随机生成一个数字?该数字必须在编译时随机生成(或者每个随机值都设置为用户选择的随机值),因此任何运行时函数都不好。

如果有更好的方法,我愿意接受任何建议,但我绝对希望游戏数据文件使用私钥/公钥对加密,并且公钥尽可能保密。

最佳答案

由于您在编译时生成一个常量随机数,该随机数将嵌入到您的程序中,因此我看不出这与您自己将随机数(您自己选择的)硬编码到其中有什么区别。我想使用宏,每次编译都会得到一个不同的随机数。真的那么重要吗?

我建议做一些更简单的事情:如果 key 只是 ASCII 文本(位就是位,对吧?)您可以使用一个看似无害的诊断字符串作为您的 key ,并且没有人会注意到它。

不过,默默无闻的安全性通常遭到该领域专家的反对(他们经常皱眉)。如果你真的在做公钥加密,把公钥暴露是完全可以的。这才是重点。是必须保密的私钥。

如果你真的想这样做,那么我会看一下随机数生成算法,并将它的迭代展开到一个(大)宏中,该宏本质上采用一个种子并计算出一个产生伪随机整数的大表达式作为它的结果。应该这样做。如果种子以某种方式源自不可预测的事物,例如编译时间 (__TIME__),它可能会起作用。

关于c++ - C++ 宏中的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468179/

相关文章:

algorithm - 如何按一定比例随机选择

algorithm - 从一组 N 中随机选择 n 条记录

c - 在哪里创建宏变量?和变量的大小?

C++ 宏字符串连接

c++ - OpenGL VBO 和指针的问题

c++ - 使用 OpenCV 在 C++ 中缩放图像,但不使用 pyrDown() 或 pyrUp() 函数

sql-生成64位的随机整数

functional-programming - 或作为方案中的程序

c++ - 在 OpenCV 中使用多线程访问 Mat 是线程安全的吗?

c++ - 如何在C++中有效地存储数据