Linux系统产生随机数的6种方法:
- 通过系统变量"$RANDOM"实现:
[root@mycentos7 ~] # echo $RANDOM
20081
[root@mycentos7 ~] # echo $RANDOM
26946
- 通过openssl产生随机数实现:
[root@mycentos7 ~] # openssl rand -base64 8
cpe34omgO1E=
[root@mycentos7 ~] # openssl rand -base64 10
9VO3vqRH3b4Ouw==
#rand参数:产生伪随机数
/*
-base64:是一种编码方式,就像ASCII编码。-base64使用的是64个可读字符进行编码,这些字符是:
数字:0,1,2,3,4,5,6,7,8,9,共10个
小写字母:a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,共26个
大写字母:A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,共26个
加"+"以及斜杠"/"
*/
#8、10这些数字是rand参数产生随机数所需要的seed(传递给rand参数的实现函数)
#openssl rand 也可以使用"-Hex"十六进制的编码方式
/*
Linux系统中也有"base64"命令。用于加密和解密相应的字符串:
加密:
[root@mycentos7 ~] # echo "hello world" | base64
aGVsbG8gd29ybGQK
解密:
[root@mycentos7 ~] # echo "aGVsbG8gd29ybGQK" | base64 -d
hello world
*/
- 通过时间"date"获得随机数实现:
[root@mycentos7 ~] # date "+%s%N"
1606476519773106477
[root@mycentos7 ~] # date "+%s%N"
1606476523772867099
- 通过"/dev/urandom"配合cksum生成随机数:
[root@mycentos7 ~] # head /dev/urandom |cksum
1851088173 1878
[root@mycentos7 ~] # head /dev/urandom |cksum
2168688483 2291 #2168688483是CRC校验码 2291是字节数
/*
/dev/urandom文件存储着系统当前运行环境的实时数据。它可以看作系统在某个时刻的唯一值,因此可以用作随机数源数据。我们可以通过文件读取的方式,读到里面的数据。
cksum命令检查文件的CRC检验码是否正确。可以通过cksum命令对文件产生一个CRC校验码;
*/
- 通过UUID生成随机数实现:
[root@mycentos7 ~] # cat /proc/sys/kernel/random/uuid
0186c379-75e0-4bdd-9cad-d7d71e9938d6
[root@mycentos7 ~] # cat /proc/sys/kernel/random/uuid
6bc0042f-cd57-4913-b6b8-a5a940b983ad
#每次查看"/proc/sys/kernel/random/uuid",系统内核就会根据实时数据生成一个随机串码
- 使用expect附带的mkpasswd命令生成随机数:
[root@mycentos7 ~] # mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
ySsgNF26\
[root@mycentos7 ~] # mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
od16SHuN^
[root@mycentos7 ~] # mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
3B-AR2efu
# -l:指定密码长度
# -d:指定密码中数字的数量
# -c:指定密码中小写字母的数量
# -C:指定密码中大写字母的数量
# -s:指定密码中特殊字符的数量
以上方式产生的随机数长度不一,可通过"md5sum"加密,然后"cut -c" 截取自己想要的长度。