有兩種方法可以獲取內(nèi)核隨機(jī)數(shù)。
創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元二道做網(wǎng)站,已為上家服務(wù),為二道各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
根據(jù)博客園官網(wǎng)查詢,一種是通過內(nèi)核導(dǎo)出的隨機(jī)數(shù)接口,另一種是通過特殊的設(shè)備文件。
Linux是一種開源電腦操作系統(tǒng)內(nèi)核。它是一個(gè)用C語(yǔ)言寫成,符合POSIX標(biāo)準(zhǔn)的類Unix操作系統(tǒng)。
如何設(shè)置種子呢?一般就 用time函數(shù)返回當(dāng)前時(shí)間即可。一般來講,這樣的做法基本上就可以了,因?yàn)殡m然我們用的是隨機(jī)數(shù),但是由于種子不同,從上億的數(shù)中去猜測(cè)我們的種子幾乎 是不可能的。例如:#include #include #include #define random(x) (rand()%x) void main() { srand((int)time(0));for(int x=0;x 0) { unsigned int r;int i;for (i = 0; i 512; i++) { read (fd, r, sizeof (r));ticks += r;} close (fd);} srand (ticks);printf("init finished ");} unsigned int new_rand () { int fd;unsigned int n = 0;fd = open ("/dev/urandom", O_RDONLY);if (fd 0) { read (fd, n, sizeof (n));} close (fd);return n;} int main () { int n, i;init_random ();n = rand ();printf ("n=%d ", n);for(i=0;i
linux內(nèi)核自1.3.30版本以來實(shí)現(xiàn)了一個(gè)隨機(jī)數(shù)產(chǎn)生器,從理論上說它能產(chǎn)生真正的隨機(jī)數(shù),該隨機(jī)數(shù)產(chǎn)生器是從設(shè)備驅(qū)動(dòng)收集電路上的環(huán)境噪音放入熵池,它的實(shí)現(xiàn)代碼在drivers/char/random.c中,自己去看吧
1、/dev/random和/dev/urandom是linux系統(tǒng)提供的隨機(jī)偽設(shè)備,其作用是提供非空的隨機(jī)字節(jié)數(shù)據(jù)流,多用于SSH, SSL的keys等。
這兩個(gè)的區(qū)別是什么?
首先我們要理解一個(gè)高大上的詞: 熵(Entropy)拼音(Shang)。熵被用于計(jì)算一個(gè)系統(tǒng)中的失序現(xiàn)象,或者說混亂程度。「熵增加原理」的意思是:在沒有外界影響的情況下(孤立系統(tǒng))無法利用的能量會(huì)越來越多,而且這個(gè)過程無法自發(fā)逆轉(zhuǎn)。 真是一個(gè)令人沮喪的理論(閑話少說)
Linux計(jì)算熵,是通過系統(tǒng)的環(huán)境噪音自動(dòng)生成,這里的環(huán)境噪音可以是鍵盤,鼠標(biāo),內(nèi)存,文件,進(jìn)程等等。
下面的命令可以查看系統(tǒng)熵
當(dāng)entropy_avail中的值小于閾值,讀取/dev/random就會(huì)被阻塞。
現(xiàn)在來看/dev/random與/dev/urandom的區(qū)別。
前一個(gè)/dev/random叫做 真隨機(jī)數(shù)生成器 ,會(huì)消耗熵值來產(chǎn)生隨機(jī)數(shù),同時(shí)在熵耗盡的情況下會(huì)阻塞,知道新的熵生成。
/dev/urandom叫做 偽隨機(jī)數(shù)生成器 ,它根據(jù)熵池中的一個(gè)隨機(jī)種子來產(chǎn)生一系列偽隨機(jī)數(shù)。但如果在系統(tǒng)啟動(dòng)階段使用 /dev/urandom ,則可能存在熵池中還不存在任何熵的情況,這時(shí)候用 /dev/urandom 產(chǎn)生的隨機(jī)數(shù)是可預(yù)測(cè)的。
2、tr 指令從標(biāo)準(zhǔn)輸入設(shè)備讀取數(shù)據(jù),經(jīng)過字符串轉(zhuǎn)譯后,將結(jié)果輸出到標(biāo)準(zhǔn)輸出設(shè)備。
tr [-cdst][--help][--version][第一字符集][第二字符集]
tr的各種參數(shù)就不一一列舉了,舉例子:
這兩個(gè)命令都是將sample.txt文件的內(nèi)容小寫字母全部轉(zhuǎn)換成大寫字母。
3、head/tail命令
從頭/尾顯示
head -n 3 file name表示顯示前三行;
head -c 30 file name表示顯示前30個(gè)字符。
4、生成隨機(jī)變量
可以看到隨機(jī)生成了24位的變量放到RD里。
echo `date +"%Y-%m-%d %H:%M:%S"` begin 文件路徑
echo $RANDOM 文件路徑
shell中有一個(gè)環(huán)境變量為$RANDOM,實(shí)際的取值范圍為:0-32767
echo `date +"%Y-%m-%d %H:%M:%S"` '我是中文' $RANDOM 文件路徑
MAXCOUNT=10 #這是變量
count=1 #同上
number=$RANDOM
FLOOR=0
RANGE=999 #隨機(jī)數(shù)范圍,1-999之間,可以改
number=0
while [ "$number" -le $FLOOR ]
do
number=$RANDOM
let "number %= $RANGE"
done
echo "$number"
這樣就可以產(chǎn)生隨機(jī)數(shù)了.....,沒時(shí)間了,.別的沒法一一注釋,自己看