1. 程式人生 > 實用技巧 >Linux系統產生隨機數的6種方法

Linux系統產生隨機數的6種方法

方法1:通過系統環境變數($RANDOM)

[root@node1 scripts]# echo $RANDOM
4245
[root@node1 scripts]# echo $RANDOM
22740


RANDOM的隨機數範圍為0~32767,因此,加密性不是很好,可以通過在輸出的隨機數後增加加密字串(就是和密碼生成有關的一個字串)的方式解決,最後再一起執行md5sum操作並擷取結果的後n位,這樣一來,就無法根據隨機數範圍0~32767來猜出具體結果了。

[root@node1 scripts]# echo king$RANDOM
king22063
[root@node1 scripts]# 
echo king$RANDOM|md5sum 3fbe359b707854cabcbc96af50b717e4 - [root@node1 scripts]# echo king$RANDOM|md5sum|cut -c 8-15 eda56360

方法2:通過openssl產生隨機數

[root@node1 scripts]# openssl rand -base64 8
L6rJK6fykP4=
[root@node1 scripts]# openssl rand -base64 80
7lWMxZTmmPwLCwkO24BxHX82CX2eOv7DGoS+Wsolo+L86dgfSQts7sokjDvG5uk2
6rQwrqqu1MIpFpyKtCNvEwSnh43
/OWZAzqREA4NOkLA= 令數字與大小寫字元相結合,並且帶上特殊字元,可以達到很長的位數,這樣的隨機數很安全。

方法3:通過時間(date)獲得隨機數

[root@node1 scripts]# date +%s%N
1602673097974691108

方法4:通過/dev/urandom配合chksum生成隨機數。

[root@node1 scripts]# head /dev/urandom|cksum
2360985463 1289

/dev/random裝置儲存著系統當前執行環境的實時資料。它可以看作系統在某個時候的唯一值,因此可以用作隨機數元資料。我們可以通過檔案讀取的方式,讀到裡面的資料。/dev/urandom這個裝置的資料與random裡的一樣。只是,它是非阻塞的隨機數發生器,讀取操作不會產生阻塞。

方法5:通過UUID生成隨機數。

[root@node1 scripts]# cat /proc/sys/kernel/random/uuid 
01018ade-6388-45d9-8fd0-a14e2032c5c3

    UUID碼全稱是通用唯一識別碼(Universally Unique Identifier,UUID),它是一個軟體建構的標準,亦為自由軟體基金會(Open Software Foundation,OSF)的組織在分散式計算環境(Distributed Computing Environment,DCE)領域的一部分。
    UUID的目的是讓分散式系統中的所有元素都能有唯一的辨識資訊,而不需要通過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其他人發生衝突的UUID。在這樣的情況下,就不需要考慮資料庫建立時的名稱重複問題了。它會讓網路中任何一臺計算機所生成的UUID碼都是網際網路整個伺服器網路中唯一的編碼。它的原資訊會加入硬體、時間、機器當前執行資訊等。

方法6:使用expect附帶的mkpasswd生成隨機數。

mkpasswd命令依賴於資料包expect,因此必須通過“yum install expect–y”命令先安裝該資料包:
[root@node1 scripts]# mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
3TYKmb*9k

相關引數說明如下:
-l #   (length of password, default = 9)       #<==指定密碼長度。
-d #   (min # of digits, default = 2)          #<==指定密碼中數字的數量。
-c #   (min # of lowercase chars, default = 2) #<==指定密碼中小寫字母的數量。
-C #   (min # of uppercase chars, default = 2) #<==指定密碼中大寫字母的數量。
-s #   (min # of special chars, default = 1)   #<==指定密碼中特殊字元的數量。