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)   #<==指定密碼中特殊字符的數量。

 

統一長度

[root@node1 ~]# mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1 |md5sum|cut -c 2-10
ae9f4de5a

[root@node1 ~]# cat /proc/sys/kernel/random/uuid |md5sum |cut -c 2-10
c86a47f40

[root@node1 ~]# openssl rand -base64 8|md5sum |cut -c 2-10
c3aeb3623

[root@node1 ~]# date +%s%N|md5sum |cut -c 2-10
1e5d15e0f

[root@node1 ~]# head /dev/urandom|cksum|md5sum |cut -c 2-10
0450c1874

[root@node1 ~]# echo king$RANDOM|md5sum|cut -c 2-10
74962dd54

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM