c++ - 不可预测的伪RNG

标签 c++ random rsa

我正在为学校的 C++ 密码学项目工作,我需要一种方法来生成不能由其他人(“猜到”种子)重新生成的随机数。
准确地说,我需要一个纯随机生成器,或者一种获得 100%“安全”种子的方法。我已经做了一些研究和思考,并且找到了两种可以做到这一点的方法,第一种方法是用当前时间初始化种子,但这让我不得不担心“黑客”可能会发现 key 生成的时刻,然后他们就会有种子,因此能够预测下一个生成的数字。我发现的第二种方法是向用户索取种子。
现在,如果我不想让用户生成 key 怎么办?我对基于时间的种子的担忧是成立的还是纯粹的偏执狂?有没有人可以获得代码的执行时刻?还是有其他我错过的方法?
旁注:我正在使用 random_default_engine来自 <random>

最佳答案

user1095108 的想法是正确的,但评论可能太短了。

要求用户随机输入一些内容。每个字符大约有 1 位的随机性。用户非常不擅长选择随机字符。然而,您将需要大约 40-50 位。

但是,用户也很不擅长以精确的节奏打字。每次击键的时间会增加一些额外的随机性,具体取决于您的操作系统能够报告的准确程度。对于毫秒分辨率,10 次击键应该足够了。

关于c++ - 不可预测的伪RNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20658859/

相关文章:

javascript - 如何使用javascript中的if语句根据随机数显示/隐藏文本(无jquery)

c# - rsacryptoserviceprovider.VerifyData 总是返回 false

c - 为什么不使用大于 10 位的数字?

jwt - 如何使用 JWT.io 生成 JWT

c++ - 运行时类型比较

c++ - 分配给 map 迭代器会导致值更改而不是引用

c++ - 如何在链表中搜索结构对象

c++ - c++中具有不同数据类型的变量参数

random - 如何在DrScheme R5RS中使用 "random"函数

swift - 在 SpriteKit 中创建随机数