srand 是加密垫的可靠来源吗?

问题描述

我希望对音频软件插件上的许可证密钥进行加密。许可证密钥完整性的最大风险是小型破解者反编译代码并寻找加密密钥。我的解决方案是在代码中存储一个任意数字,并将其提供给一种算法,该算法将混淆加密密钥,同时仍然允许我在项目之间区分密钥(我是一名自由职业者)。

我的问题是 - 每次播种 C++ 随机生成器都会创建相同的伪随机加密密钥,还是在运行、库等之间会有所不同。如果操作系统不同也没关系,我只需要它在同一台计算机上的 SDK 和托管软件之间没有区别。

解决方法

当您使用相同的实现时,

srandrand 将产生相同的数字序列。更改编译器,即使是同一编译器的更新版本,也无法保证,

但是在 C++11 中引入并在 <random> 中定义的新随机数生成器要求在所有实现中生成相同的数字序列。