1

Я знаю, что могу получить случайные (ну, псевдослучайные) символы без ограничений из '/dev/random' (или /dev/urandom). Но что, если мне понадобятся эти символы для генерации имени файла? Мне нужно как-то иметь поток или последовательность печатных символов или буквенно-цифровых символов, чтобы быть в безопасности. Какой лучший способ сделать это в оболочке?

(Я знаю, что теоретически мог бы сделать tr для символов из /dev/random но это не похоже на то, что нужно делать.)

3 ответа3

2

Я вижу, что /usr/bin/jot может поддерживать указанное количество ограниченных случайных символов, которые могут быть преобразованы в слова, подходящие для имени файла. Вероятно, есть более красноречивый способ указания всех печатаемых символов, но я немного заржавел в своих сценариях оболочки.

[mini-nevie:~] nevinwilliams% jot -r -c 25 A Z | rs -g
EUCGGSIOIDMPCHXCHIGYXBYWJ
[mini-nevie:~] nevinwilliams% jot -r -c 25 A Z | rs -g
PMKQQZOCYETVIHIMTIQFYTFZK
[mini-nevie:~] nevinwilliams% jot -r -c 25 A Z | rs -g
CXBKEFSIRCOOGUICJPOMZKMSG
[mini-nevie:~] nevinwilliams% jot -r -c 25 A Z | rs -g
MEHSFOSHLKKJRKQLRCXUCBJAD
[mini-nevie:~] nevinwilliams% jot -r -c 25 A Z | rs -g
ZCCGKYIWLBTJUVIHQBCHXCVEU
1

Тонкая настройка @ Дауд в растворе:

dd if=/dev/urandom bs=124 count=1 2>/dev/null | sha256sum | cut -c1-64

получает 64 персонажа; и вы можете использовать /dev/random в системах UN * X без /dev/urandom .

Другой, более простой подход, основанный на предложении @ NevinWilliam: просто сделайте

date +%s.%N

Никакие символы алфавита не являются особым случаем буквенно-цифровых символов ... это не охватывает весь диапазон возможных строк, оно ограничено 9 символами и не очень случайно - за исключением, может быть, последних 2-4 цифр или около того - но так как мы не делаем крипто, это должно быть достаточно хорошо.

1

$ dd if=/dev/urandom of=/dev/stdout bs=124 count=1 2>/dev/null | sha256sum | awk '{print $1}'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .