Solaris 中的随机数生成?

Jar*_*486 2 shell bash solaris shell-script random

在 Solaris 中生成随机数的最佳方法是什么?

我似乎无法为此找到一个好的答案。大多数结果在我的环境中不起作用。有一个变量或命令 RAND 看起来很合乎逻辑,它会以某种类似于 $RANDOM 的方式工作,我在大多数搜索中看到它,但它总是产生 0。

我找到了这个命令

od -X -A n /dev/random | head -2
Run Code Online (Sandbox Code Playgroud)

这看起来很随机,但返回格式很奇怪(对我来说)。

     140774 147722 131645 061031 125411 053337 011722 165106
     066120 073123 040613 143651 040740 056675 061051 015211
Run Code Online (Sandbox Code Playgroud)

目前使用:

-bash-3.2$ uname -a
SunOS XXXXXXXXX 5.10 Generic_150400-29 sun4v sparc SUNW,SPARC-Enterprise-T5120
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 6

$RANDOM在 ksh 和 bash 中可用,但在/bin/sh. 该值是 0 到 32768 之间的随机数,不适合加密使用。

从中读取会/dev/random生成适合加密使用的随机字节流。由于这些是任意字节,可能包括空字节,因此您不能将它们存储在 shell 变量中。您可以将$n字节存储在文件中

</dev/random dd ibs=1 count=$n >rnd
Run Code Online (Sandbox Code Playgroud)

您可以使用od八进制或十六进制值将这些字节转换为可打印的表示形式。如果您发现输出“奇怪”,那么也许您应该选择不同的od选项。

获得可打印表示的另一种选择是调用uuencode生成 Base64:

</dev/random dd ibs=1 count=$n | uuencode -m _ | sed -e '1d' -e '$d'
Run Code Online (Sandbox Code Playgroud)