C++宏中的随机数
Random Numbers in C++ Macros
我正在开发一种加密游戏数据文件的方法,该方法将在我正在创建的游戏引擎中使用。游戏数据文件将使用私钥加密,并在加载到游戏引擎后解密。
私钥将在引擎中手动设置(作为 const(,以便将其编译到引擎中。然而,诀窍是在那里混淆它,这样你的普通 Joe Bloggs 就无法(轻松(通过反汇编和逆向工程代码找到密钥。
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
};
我的想法是将密钥存储在与随机生成的字节混杂在一起的段中。我的问题是这样的:
有没有办法在C++宏中随机生成一个数字?该数字必须在编译时随机生成(或将每个随机值设置为随机用户选择的值(,因此任何运行时函数都不好。
如果有更好的方法,我愿意接受任何建议,但我绝对希望使用私钥/公钥对加密游戏数据文件,并且公钥尽可能保密。
由于您在编译时生成一个常量随机数,该随机数将被烘焙到您的程序中,因此我认为这与简单地将随机数(您自己选择的(硬编码到其中之间没有区别。我想使用宏,每次编译都会得到一个不同的随机数。这真的那么关键吗?
我建议做一些更简单的事情:如果密钥只是ASCII文本(位就是位,对吧?(,您可以使用看起来很可疑的诊断字符串作为密钥,没有人会注意到它。
尽管如此,默默无闻的安全性通常被该领域的专家所反对(他们经常皱眉(。如果您真的在进行公钥加密,那么公开公钥是完全可以的。毕竟这是重点。私钥必须保密。
如果你真的想这样做,那么我会看看一个随机数生成算法,并将其迭代展开到一个(大(宏中,该宏本质上接受一个种子并计算为一个产生伪随机整数作为结果的大型表达式。这应该可以做到。如果种子以某种方式派生自不可预测的事情,例如编译时间(__TIME__
(,它可能会起作用。
目前没有任何 rand 宏或模板元函数,但可以创建它......付出了很多努力。
另一方面,您可以简单地触摸/dev/random 作为构建过程的一部分,或者其他一些随机源,并使用结果创建一个标头。 包括此标头,您可以在其中获得随机数常量。
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 整数不会重复超过随机数
- if数组上的随机数
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 半随机数生成C++
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 有没有办法在 c++ 中同时生成随机数?如果没有,是否有解决方法?
- 具有随机数的二维数组不会更改
- 随机数未达到限制
- 我想生成许多矩阵并用随机数填充它
- <random>在实践中应该实际使用哪个随机数引擎? std::mt19937?
- 制作具有平均值的随机数生成器
- 为什么 rand 不在我的代码中生成随机数?
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 从给定种子生成相同的随机数序列C++
- 随机数生成函数说明
- C++ 尝试生成随机数时弹出警告帮助?
- 尝试在 c++ 中创建随机数生成器并收到错误
- 从给定的随机数组值生成随机数 Arduino程序C++
- 如何在个人计算机和群集 (c++) 上生成相同的随机数