diff --git a/updater/install.c b/updater/install.c
index a1acdb9..2f2631a100644--- a/updater/install.c
+++ b/updater/install.c
@@-450,7 +450,7 @@ Value* RetouchBinariesFn(const char* name, State* state,
bool override_set = false;
int32_t random_base= time(NULL) % 1024;
// some more randomness from /dev/random- FILE *f_random = fopen("/dev/random", "rb");
+ FILE *f_random = fopen("/dev/urandom", "rb");
uint16_t random_bits= 0;
if (f_random != NULL) {
fread(&random_bits, 2, 1, f_random);
遇到這樣的事情,當然是先上網(wǎng)搜索/dev/random和/dev/urandom,找到一段話(http://www.linuxidc.com/Linux/2012-05/60476.htm)
創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡公司、廣告設計公司的優(yōu)秀設計人員和策劃人員組成的一個具有豐富經(jīng)驗的團隊,其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設計師、平面廣告設計師、網(wǎng)絡營銷人員及形象策劃。承接:成都網(wǎng)站建設、做網(wǎng)站、網(wǎng)站改版、網(wǎng)頁設計制作、網(wǎng)站建設與維護、網(wǎng)絡推廣、數(shù)據(jù)庫開發(fā),以高性價比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務。Linux中的隨機數(shù)可以從兩個特殊的文件中產(chǎn)生,一個是/dev/urandom.另外一個是/dev/random。他們產(chǎn)生隨機數(shù)的原理是利用當前系統(tǒng)的熵池來計算出固定一定數(shù)量的隨機比特,然后將這些比特作為字節(jié)流返回。熵池就是當前系統(tǒng)的環(huán)境噪音,熵指的是一個系統(tǒng)的混亂程度,系統(tǒng)噪音可以通過很多參數(shù)來評估,如內(nèi)存的使用,文件的使用量,不同類型的進程數(shù)量等等。如果當前環(huán)境噪音變化的不是很劇烈或者當前環(huán)境噪音很小,比如剛開機的時候,而當前需要大量的隨機比特,這時產(chǎn)生的隨機數(shù)的隨機效果就不是很好了。
這就是為什么會有/dev/urandom和/dev/random這兩種不同的文件,后者在不能產(chǎn)生新的隨機數(shù)時會阻塞程序,而前者不會(ublock),當然產(chǎn)生的隨機數(shù)效果就不太好了,這對加密解密這樣的應用來說就不是一種很好的選擇。/dev/random會阻塞當前的程序,直到根據(jù)熵池產(chǎn)生新的隨機字節(jié)之后才返回,所以使用/dev/random比使用/dev/urandom產(chǎn)生大量隨機數(shù)的速度要慢。
好吧,上面那段熵什么的我們就先不深究了,我下來再學習。不過基本上可以解釋我的兩個疑問了:
這哪是慢啊,簡直是要命了。
引申閱讀 http://zh.wikipedia.org/wiki//dev/random