Bash

Solaris中的隨機數生成?

  • November 25, 2015

在 Solaris 中生成隨機數的最佳方法是什麼?

我似乎找不到一個好的答案。大多數結果在我的環境中不起作用。有一個變數或命令 RAND 看起來合乎邏輯,它會以類似於我在大多數搜尋中看到的 $RANDOM 的某種方式工作,但它總是產生 0。

我找到了這個命令

od -X -A n /dev/random | head -2

這似乎很隨機,但返回格式很奇怪(對我來說)。

    140774 147722 131645 061031 125411 053337 011722 165106
    066120 073123 040613 143651 040740 056675 061051 015211

目前使用:

-bash-3.2$ uname -a
SunOS XXXXXXXXX 5.10 Generic_150400-29 sun4v sparc SUNW,SPARC-Enterprise-T5120

$RANDOM在 ksh 和 bash 中可用,但在/bin/sh. 該值是 0 到 32768 之間的隨機數,不適合加密使用。

讀取/dev/random會生成適合加密使用的隨機字節流。由於這些是任意字節,可能包括空字節,因此您不能將它們儲存在 shell 變數中。您可以將$n字節儲存在文件中

</dev/random dd ibs=1 count=$n >rnd

您可以使用od八進製或十六進制值將這些字節轉換為可列印的表示。如果您發現輸出“奇怪”,那麼也許您應該選擇不同的od選項。

獲得可列印表示的另一個選項是呼叫uuencode生成 Base64:

</dev/random dd ibs=1 count=$n | uuencode -m _ | sed -e '1d' -e '$d'

引用自:https://unix.stackexchange.com/questions/245036