Linux 随机数生成的六种方法
Shell
$RANDOM
- 系统环境变量
- 随机数范围 0-32767
- 加密性不好
- 可通过添加加密字符串加强安全性
- 常与md5sum 联用 ,cut -c
- 示例:
echo "abc$RANDOM"|md5sum|cut -c 1-8
没有空格,连续字符可不加双引号
abc
为加密字符
openssl
openssl rand[-out file] [-randfile(s)] [-base64] [-hex]num
- 产生指定长度个bytes的随机字符
- out :指定随机数输出文件,否则输出到标准输出
- rand file :指定随机数种子文件。种子文件中的字符越随机,openssl rand生成随机数的速度越快,随机度越高
- base64 :指定生成的随机数的编码格式为base64
- hex :指定生成的随机数的编码格式为hex
- num :指定随机数的长度。字节数
- -base64 / -hex 对随机字符串进行base64编码或用hex格式显示 这可以消除乱码
- 随机类型:数字 大小写字符相结合 特殊字符组合
echo $LANG 查看当前编码体系:
编码不同,换算不同。
- ASCII码:一个英文字母占一个字节的空间,一个中文汉字占两个字节的空间。
- UTF-8编码:一个英文字符等于一个字节,一个中文等于三个字节。
- Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。
符号:英文标点占一个字节,中文标点占两个字节。
date +%s%N
date +%s # 返回 11 位时间戳,%s 表示从 1970-01-01 0点(epoch开始的秒数
date +%s%3N # 返回 14 位时间戳,毫秒
date +%s%N # 返回 11 + 9 位纳秒
- %s 从1970年1月1日00:00:00到目前经历的秒数 11 位时间戳
- %s%N 11 + 9 位纳秒
- %s%3N 14 位时间戳,毫秒
- 纯数字随机数
/dev/urandom 配合cksum
- cksum 校验值CRC 循环冗余校验法
- 非阻塞随机数发生器
head /dev/urandom|cksum
UUID
universally unique idetifier
- 使得分布式系统中所有元素都能有唯一标识符
- 信息会加入硬件、时间、及其当前运行信息等
expect mkpasswd
- -l 指定 长度
- -d 指定 数字的个数
- -c 指定 小写字符个数 -C 指定大写字符个数
- -s 指定特殊字符个数
usage: mkpasswd [args] [user]
where arguments are:
- -l # (length of password, default = 7)
指定密码的长度,默认是7位数
- -d # (min # of digits, default = 2)
指定密码中数字最少位数,默认是2位
- -c # (min # of lowercase chars, default = 2)
指定密码中小写字母最少位数,默认是2位
- -C # (min # of uppercase chars, default = 2)
指定密码中大写字母最少位数,默认是2位
- -s # (min # of special chars, default = 1)
指定密码中特殊字符最少位数,默认是1位