2013-10-28 37 views
0

我只想在我的代碼中使用/dev/random/dev/urandom來生成隨機數。這個應用程序將在所有的linux版本上運行。如果這些設備文件不在/ dev目錄中,我的應用程序將會失敗。因此,這些設備文件(/dev/random/dev/urandom)在每種linux版本中都可用?是/ dev/random和/ dev/urandom在每臺linux機器上都可用?

+0

是的。但'/ dev/random'非常慢,'/ dev/urandom'類似於像'drand48()'這樣的函數。你可以使用'/ dev/random'初始化生成器(通過'srand48()'),然後使用簡單的函數。 –

回答

1

這些設備是在啓動時由內核創建的。大多數GNU/Linux發行版都會有它們,但這並非總是如此,你可以編譯一個內核以避免讓它們出現,所以可能會有系統在那裏找不到它們,所以要小心。你應該總是編寫處理這種奇怪/惡劣情況的代碼。然而,99'99%的系統將運行你的程序將有兩個文件。

關於這些文件,/ dev/random會產生它的數字,收集用戶和外設產生的噪聲,問題是如果熵池是空的,read()操作會阻塞它(除非文件已經用O_NONBLOCK打開)。/dev/urandom是普通的僞隨機數生成器,但它是「非阻塞」的。

由於您實際上正在編寫代碼,因此我認爲您的程序不需要太多關注安全性的開發,所以我會建議您使用/ dev/urandom,以便您的程序不會等待熵的/ dev /隨機的。但是,如果你的程序真的需要安全性......那麼,除非你真的真的知道你在做什麼,否則不要編寫自己的安全相關代碼。例如,閱讀關於「側通道攻擊」的內容。

祝你好運。

相關問題