欢迎光临散文网 会员登陆 & 注册

如何在Linux终端生成随机字符

2023-07-02 17:11 作者:KHDXS7  | 我要投稿

一、随机数生成器

要在Linux/Unix发行版中生成随机数据,有种选择:/dev/random或者/dev/urandom

这些设备是存储随机生成的数据的特殊文件。如果用ls -l查看文件属性则显示为字符型设备文件。它们可以像普通文件一样读取,并且读取的数据是通过系统中提供随机性的多个熵源生成的。

/dev/random会从设备驱动收集环境噪音到一个熵池,比如CPU、硬盘、鼠标等,随机数就从该熵池中获取。当熵池中的数据用完之后,就会处于阻塞状态,,直到收集到额外的环境噪音。/dev/random是一个传统的接口,现在在大部分场合下已经被/dev/urandom替代。

/dev/urandom同样是从熵池中请求随机数。但是如果请求的随机数据比较庞大,在熵池中数据耗尽后会使用SHAMD5或者其它算法来产生数据。也就意味着/dev/urandom并不会阻塞,并且生成的随机数并不一定真的随机。相对来说,/dev/random生成的随机数随机程度更高。

通过以下命令可以查看系统中熵池的大小,单位为二进制位数。

cat /proc/sys/kernel/random/poolsize

二、random 和 urandom 的区别

1. 区别

项目randomurandom小数据随机程度非常高非常高大数据随机程度可能因为熵池耗尽而阻塞,
直到收集到新的环境噪音。比较高是否会阻塞是否响应速度慢快

2. 应用场景

根据不同的特点可以在不同的场景使用。

/dev/urandom应用场景:

  • 生成一个随机数据构成的文件用于测试。

  • 使用dd命令把随机数据写入硬盘以达到擦除硬盘的效果。

/dev/random应用场景:

  • 一次性密码、生成密钥。

三、应用

1. 生成密码

  • 生成10位纯数字的密码

    tr -dc '0-9' < /dev/random | head -c 10
  • 生成10位包含大小写字母和数字的密码

    tr -dc 'a-zA-Z0-9' < /dev/random | head -c 10

    tr -dc [:alnum:] < /dev/random | head -c 10

2. 生成文件

  • 生成BASE64编码的随机文件

    base64 < /dev/random | head -c 1000 > test.txt
  • 生成1G大小的包含随机数据的文件

    head -c 1G /dev/urandom > myfile

    dd bs=1G count=1 dd if=/dev/random of=myfile

3. 覆盖存储设备数据

  • 使用/dev/urandom进行覆盖

    sdX替换为要覆盖的存储设备。

    dd if=/dev/urandom of=/dev/sdX
  • 使用/dev/zero进行覆盖

    sdX替换为要覆盖的存储设备。

    dd if=/dev/zero of=/dev/sdX


如何在Linux终端生成随机字符的评论 (共 条)

分享到微博请遵守国家法律