浅谈生成随机数的若干种方式?

在日常的工作中,经常会遇到关于随机数的问题。随机数会在系统中会频繁使用,例如验证码、订单ID、密钥等等。
 随机数据很重要,而在linux中如果需要生成随机数据有哪些方式呢?下面我们依次看看都有哪些方式。

使用命令生成随机数据

Unix/Linux环境中大都有一个名为uuidgen的小工具,运行即可生成一个UUID到标准输出,读取文件/proc/sys/kernel/random/uuid即得UUID,例如:

在这里插入图片描述

uuidgen命令

在这里插入图片描述

从上面的信息来看,生成16进制随机字符串,每次运行uuidgen都产生不同的随机字符串。

dbus-uuidgen 命令

在这里插入图片描述

dbus-uuidgen产生的uuid没有-(减号)字符。每次运行dbus-uuidgen都产生不同的随机字符串。

openssl rand 产生随机数

rand命令用来产生伪随机字节,随机数字产生器需要一个seed,在没有/dev/srandom系统下的解决方法是自己做一个~/.rnd文件,如果该程序能让随机数字产生器很满意的被seeded。程序写回一些怪怪的东西回该文件。

语法:

openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num

选项:

在这里插入图片描述

-out file:结果输出到file中。
-rand file(s):指定随机数种子文件,多个文件间用分隔符分开,windows用“;”,OpenVMS用“,“,其他系统用“:”。
-base64:输出结果为BASE64编码数据。
-hex:输出结果为16进制数据。
num:随机数长度。

使用选项-hex:输出结果为16进制数据。
在这里插入图片描述

使用选项-base64:生成含特殊符号的随机字符串。

在这里插入图片描述

算一算,使用base64算法生成的随机数据,其最终长度为(n/3)向上取整后再乘以4。如(1/3)=0.33333,向上取整为1 ,最终base64编码后的长度为1 * 4 = 4位。

使用设备文件生成随机数据

在linux操作系统中默认提供了两个可以生成随机数据的设备文件: /dev/random 和/dev/urandom。很多程序都会调用这些设备生成随机数据,例如:tomcat 、SSH等。

/dev/random依赖系统中断,因此当系统中断不足时该文件是无法提供足够的随机数据的,这样会导致需要使用random设备文件生成随机数据的程序阻塞。

/dev/urandom则不依赖于系统中断,在系统不足时也可以提供足够的随机数据。

在这里插入图片描述

这个文件可以提供无限的随机数据,所以需要使用Ctrl +C 组合键才可以中断对这两个文件的查看。

在这里插入图片描述
cat /dev/random
在这里插入图片描述
random和urandom这两个设备提供的随机数据可能会包含特殊符号,而有些验证码需要是纯数字的,有时密码需要是字母、数字且不包括特殊符号等,所以我们需要使用tr命令对原始数据进行过滤。

回到提取随机验证码或密码的问题,我们可以将random或urandom设备文件提供的多余数据删除,仅保留我们需要的数据,然后结合head之类的工具截取有效应位数的数据。

下面提取10位包含字母、数字和下画线的随机数据。

在这里插入图片描述
下面通过Linux系统自带的散列算法的工具,如md5sum、shalsum、sha265sum、sha512sum等,通过这些工具也可以生成随机数据。

需要注意的是,这种方式提取的随机数据都是十进制数,也就是随机数的范围0-9A-F。

echo -a | md5sum

在这里插入图片描述
在这里插入图片描述

想了解更多md5sum可以参考这篇<Linux下使用md5sum进行检验>

在这里插入图片描述

在这里插入图片描述

sha256sum 命令 和 md5sum 命令一样的功能,只是使用算法不同,sha256相对 md5sum 更为准确,所以现在很多的系统的发行版都是使用 sha256sum 进行校验。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值