我只想在我的代码中使用/dev/random
or/dev/urandom
来生成随机数。此应用程序将在所有 linux 风格上运行。如果 /dev 目录中不存在这些设备文件,我的应用程序将失败。那么这些设备文件(/dev/random
和/dev/urandom
)在每个 linux 风格中都可用?
问问题
593 次
1 回答
1
这些设备由内核在引导时创建。大多数情况下,所有 GNU/Linux 发行版都会拥有它们,但这并不总是正确的,您可以编译内核以不拥有它们,因此可能存在您找不到它们的系统,所以要小心。您应该始终编写处理这种奇怪/讨厌情况的代码。但是,您将运行程序的系统中有 99'99% 将同时具有这两个文件。
关于文件,/dev/random 生成它的数字,收集用户和外围设备产生的噪音,它的问题是如果熵池为空,read() 操作将阻塞(除非文件已使用 O_NONBLOCK 打开) . /dev/urandom 是常规的伪随机数生成器,但它是“非阻塞的”。
由于您实际上是在编写代码,因此我假设您的程序不需要太多与安全有关的开发,因此我建议您使用 /dev/urandom 这样您的程序就不会因为等待 /dev/random 上的熵而陷入困境. 但是,如果您的程序真的需要安全性……那么,除非您真的、真的、真的知道自己在做什么,否则永远不要编写自己的安全相关代码。例如,阅读“旁道攻击”。
祝你好运。
于 2013-10-28T12:44:51.660 回答