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)
$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)