#!/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 $1}')
Я создаю семя и соль для чего-то, что я пытаюсь собрать, вот грязная версия. теперь мне нравится, как это начинает работать, потому что я получаю здесь много действительно хорошей случайности. Но мне нужно стремиться к наивысшей энтропии здесь. Я думаю, что urandom — это инструмент для работы, но я не знаю, как я отношусь к tr -dc '0-9'
сразу после того, как вытащу из него 4k элементов. это делает так, что мне приходится сбрасывать 16 вместо 32, что я бы предпочел. потому что иногда просто не хватает номеров для выбора.
чтобы быть ясным, я хотел бы достичь следующих ограничений:
- head -c 4096 как максимальный пул из urandom во время одной команды
- seed1, seed2 должны быть последовательностью из 32 целых чисел от 0 до 9 как можно более случайными.
- если возможно, хотел бы надежно увеличить кратность до 32 (никогда не может быть начального числа меньше 32 символов)
- тянуть меньше из urandom нормально. если энтропия сохраняется.
- другие предложения в порядке, если и только если энтропия увеличивается
Как я уже говорил, tr -dc '0-9'
кажется неряшливым. и, если возможно, есть ли способ увеличить количество байтов, которые я использую из urandom (в настоящее время просто фильтрую все, что еще не является int).
это работает, но я чувствую, что должен быть лучший способ. кто-нибудь свежим взглядом увидит что-то, что я упускаю?