来自 urandom 的种子性能和可靠性

Seed performance and reliability from urandom

#!/bin/bash

seed1=0
seed2=0

while [[ "$seed1" == 0 || "$seed2" == 0 ]]; do
    seed1=$(head -c 4096 /dev/urandom | tr -dc '0-9' | fold -w 16 | head -n 1)
    seed2=$(head -c 4096 /dev/urandom | tr -dc '0-9' | fold -w 16 | head -n 1)
done

seed_array=($seed1 $seed2)
seed_array=($(echo ${seed_array[*]}| tr " " "\n" | sort -n))

salt_num=[some function id rather not reveal] < /dev/urandom
echo $(echo [seed and salt go here in some order id rather not say] | sha256sum | awk '{print }')

我正在为我试图放在一起的东西或其他东西创建种子和盐,这是一个肮脏的版本。现在,我喜欢它开始工作的方式,因为我在这里得到了很多非常好的随机性。但我需要在这里争取最高的熵。我认为 urandom 是完成这项工作的工具,但我不知道在从中提取 4k 项后我对 tr -dc '0-9' 的感觉如何。它成功了,所以我必须弃牌 16 次而不是 32 次,这是我更喜欢的。因为有时候,没有足够的数字可供选择。

明确地说,我想实现以下约束:

就像我之前说的,tr -dc '0-9' 感觉很草率。如果可能的话,有没有办法增加我从 urandom 使用的字节数(目前基本上只是过滤任何不是 int 的东西)。

它有效,但我觉得必须有更好的方法。有新眼光的人看到我遗漏了什么吗?

如何在 headtr 之间添加 | od -An -tx8 以将输出转换为十六进制,以便更可能出现 0-9。