linux 獲取隨機數的辦法


1.1.1 inux隨機數的辦法  http://www.2cto.com/kf/201410/342717.html

方法一.[root@ob ~]# date +%N  %N納秒  隨機獲取的九位數通過時間

823015723

通過時間獲得隨機數(date)

date +%s%N #生成19位數字,1287764807051101270

date +%s%N | cut -c6-13 #取八位數字,21793709

date +%s%N | md5sum | head -c 8 #八位字母和數字的組合,87022fda

 

方法二.[root@ob ~]# echo $RANDOM

24215

生成0-32767之間的整數隨機數,若超過5位可以加個固定10位整數,然后進行求余。

生成400000~500000的隨機數:

#!/bin/bash   

function rand(){ 

    min=$1

    max=$(($2-$min+1)) 

    num=$(($RANDOM+1000000000)) #增加一個10位的數再求余 

    echo $(($num%$max+$min)) 

rnd=$(rand 400000 500000) 

echo $rnd 

exit 0

方法三:使用awk的隨機函數

awk 'BEGIN{srand();print rand()*1000000}' #可以加上if判斷,779644

 

方法四openssl rand產生隨機數

 

openssl rand 用於產生指定長度個bytes的隨機字符。-base64或-hex對隨機字符串進行base64編碼或用hex格式顯示。

openssl rand -base64 8 | md5sum | cut -c1-8 #八位字母和數字的組合,3a61800e

openssl rand -base64 8 | cksum | cut -c1-8 #八位數字,10784736

方法五

(5)通過系統內唯一數據生成隨機數(/dev/random及/dev/urandom)

/dev/random存儲系統當前運行的環境的實時數據,可以看作系統某時候的唯一值數據,提供優質隨機數。

/dev/urandom是非阻塞的隨機數產生器,讀取時不會產生阻塞,速度更快、安全性較差的隨機數發生器。

cat /dev/urandom | head -n 10 | md5sum | head -c 10 #32f1e953ac

cat /dev/urandom | strings -n 8 | head -n 1 #生成全字符的隨機字符串,08?WU$ZU

cat /dev/urandom | sed -e 's/[^a-zA-Z0-9]//g' | strings -n 8 | head -n 1 #生成數字加字母的隨機字符串,Ql2q9CXS

其中 strings -n設置字符串的字符數,head -n設置輸出的行數。

head-200/dev/urandom| cksum |cut-d" " -f1 #urandom的數據很多使用cat會比較慢,在此使用head讀200行,cksum將讀取文件內容生成唯一的表示整型數據,cut以” “分割然后得到分割的第一個字段數據

(6)讀取linux的uuid碼

UUID碼全稱是通用唯一識別碼 (Universally Unique Identifier, UUID),UUID格式是:包含32個16進制數字,以“-”連接號分為五段,形式為8-4-4-4-12的32個字符。linux的uuid碼也是有內核提供的,在/proc/sys/kernel/random/uuid這個文件內。cat/proc/sys/kernel/random/uuid每次獲取到的數據都會不同。

cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" " #獲取不同的隨機整數,1675034933

cat /proc/sys/kernel/random/uuid| md5sum | cut -c1-8 #數字加字母的隨機數,d69a7ebf

使用linux uuid 生成100~500隨機數:

#!/bin/bash 

function rand(){ 

    min=$1

    max=$(($2-$min+1)) 

    num=$(cat /proc/sys/kernel/random/uuid | cksum | awk -F ' ' '{print $1}') 

    echo $(($num%$max+$min)) 

rnd=$(rand 100 500) 

echo $rnd  

exit 0

(7)從元素池中隨機抽取取

pool=(a b c d e f g h i j k l m n o p q r s t 1 2 3 4 5 6 7 8 9 10)

num=${#pool[*]}

result=${pool[$((RANDOM%num))]}   

 

 

61b53abd4e1eee16cb7966ccb2aa89da  -

[root@ob ~]# date +%N|md5sum|cut -c 6-13

e2d802fb

[root@ob ~]# echo `date +%N|md5sum|cut -c 6-13`

8ba21fee

[root@ob ~]# echo `date +%N|md5sum|cut -c 6-13`|passwd stud{1..8}^C

[root@ob ~]# useradd std{1..5}

232隨機創建密碼


免責聲明!

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



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