C++ rand()函数是一个线性一致性生成器(LCG)。我的问题是:
发布于 2019-05-08 21:03:55
C++ rand()函数(实际上是C函数)并不是为了密码目的而设计的。
正如SEJPM在注释中所指出的,rand函数来自C,C++对实现没有上限限制。
长话短说的答案;不要用它进行密码学。为了加密目的,请使用/dev/urandom
好的,它又快又小。坏消息;它是确定性的,种子很小(如注释中的poncho所指出的),因此无法从LCG生成加密安全的RNG。
发布于 2020-02-28 14:35:17
/dev/urandom是为密码学生成种子的最佳方法,但有时我们需要一个安全的确定性PRNG来使用相同的/dev/urandom计算其在两侧的序列;我正在讨论CSPRNG (加密安全伪随机数生成器)。我的建议是看看一个Salsa20实现(例如。Chacha20)。这些都是加密的安全算法,而且可能是你能找到的最好的算法。密码学的另一种选择是: Blum-Micali、艾萨克、亚罗和福图纳。也许我们想讨论一下在CSPRNG中哪一个更快。
https://crypto.stackexchange.com/questions/70408
复制相似问题