Back to Deck
Terminal window
Terminal window
[shell]
Password Generator
ИСХОДНИК Bash
ВЕРСИЯ 1.0
АВТОР Cododel
Гибкий Bash скрипт для генерации безопасных паролей с множеством опций настройки. Поддерживает случайные пароли, запоминающиеся пароли (паттерн согласная-гласная), и точный контроль типов символов.
Возможности
- Настраиваемая длина: По умолчанию 16 символов, настраивается через
-n - Запоминающийся режим: Чередование согласных и гласных для легкого запоминания
- Типы символов: Опциональные заглавные буквы, цифры и спецсимволы
- Случайная замена: Умная замена символов на основе процентов
- Без зависимостей: Чистый Bash, работает везде
Использование
# Базовое использование (16 символов, только строчные)./passgen.sh
# Произвольная длина./passgen.sh -n 24
# С заглавными и цифрами./passgen.sh -u -d
# Запоминающийся пароль со спецсимволами./passgen.sh -m -s -n 20
# Все опции (заглавные, цифры, спецсимволы)./passgen.sh -n 32 -u -d -sОпции
| Флаг | Описание |
|---|---|
-n <length> | Установить длину пароля (по умолчанию: 16) |
-u | Включить заглавные буквы |
-d | Включить цифры (10% от длины) |
-s | Включить спецсимволы (15-30% от длины) |
-m | Генерировать запоминающийся пароль (паттерн согласная-гласная) |
-h | Показать справку |
Примеры
# Простой пароль на 20 символов$ ./passgen.sh -n 20kqwjdnfgxtmplvhzrbcs
# Запоминающийся пароль$ ./passgen.sh -m -n 12tokuvineqara
# Безопасный пароль со всеми опциями$ ./passgen.sh -n 16 -u -d -saB9f*Gh2!Kl5+Mn8
# Длинный пароль для максимальной безопасности$ ./passgen.sh -n 64 -u -d -sКак это работает
- Базовая генерация: Создает строчную строку или запоминающийся паттерн
- Замена символов: Заменяет случайные позиции на:
- Заглавные: 15-30% от длины
- Цифры: ~10% от длины
- Спецсимволы: 15-30% от длины
- Вывод: Выводит финальный пароль в stdout
Исходный код
passgen.sh
#!/bin/bash
chars="abcdefghijklmnopqrstuvwxyz"consonants='bcdfghjklmnpqrstvwxyz'vowels='aeiou'digits='0123456789'special='()`~!@#$*-+={}[]:;,. ?/'
length=16include_uppercase=falseinclude_special=falsegenerate_memorable=false
__help() { cat << EOFUsage: $(basename $0) [-n <length>] [-u] [-d] [-s] [-m] [-h]Options: -n <length> Set the length of the random string (default is 16) -u Include uppercase letters in the random string -d Include digits in the random string -s Include special characters in the random string -m Generate a memorable password -h Show this help message and exitEOF exit 0}
__generate_random_password() { local length=${1:-12} local password="" local available_chars="$chars"
for ((i=0; i<length; i++)); do password+=${available_chars:RANDOM%${#available_chars}:1} done
echo "$password"}
__generate_memorable_password() { local length=${1:-12} local password="" local available_consonants="$consonants" local available_vowels="$vowels"
for ((i=0; i<length; i++)); do if (( i % 2 == 0 )); then password+=${available_consonants:RANDOM%${#available_consonants}:1} else password+=${available_vowels:RANDOM%${#available_vowels}:1} fi done
echo "$password"}
while getopts "n:udsmh" opt; do case $opt in n) length="$OPTARG" ;; u) include_uppercase=true ;; d) include_digits=true ;; s) include_special=true ;; m) generate_memorable=true ;; h) __help; exit 0 ;; *) __help; exit 1 ;; esacdone
if [ "$generate_memorable" = true ]; then res=$(__generate_memorable_password "$length")else res=$(__generate_random_password "$length")fi
function handle_special_chars() { local num_special_replacements=$((length * (15 + RANDOM % 16) / 100)) if [ "$num_special_replacements" -eq 0 ]; then num_special_replacements=1 fi
for ((i=0; i<num_special_replacements; i++)); do local index=$((RANDOM % length)) local random_special_char=${special:RANDOM%${#special}:1} res="${res:0:index}$random_special_char${res:index+1}" done}
function handle_uppercase_chars() { local num_uppercase_replacements=$((length * (15 + RANDOM % 16) / 100)) if [ "$num_uppercase_replacements" -eq 0 ]; then num_uppercase_replacements=1 fi
for ((i=0; i<num_uppercase_replacements; i++)); do local index=$((RANDOM % length)) local random_uppercase_char=$(echo "$chars" | tr '[:lower:]' '[:upper:]' | cut -c $((RANDOM % 26 + 1))) res="${res:0:index}$random_uppercase_char${res:index+1}" done}
function handle_digits() { local chance=1/10 local num_digits_replacements=$((length * chance)) if [ "$num_digits_replacements" -eq 0 ]; then num_digits_replacements=1 fi
for ((i=0; i<num_digits_replacements; i++)); do local index=$((RANDOM % length)) local random_digit=${digits:RANDOM%${#digits}:1} res="${res:0:index}$random_digit${res:index+1}" done}
if [ "$include_special" = true ]; then handle_special_chars; fiif [ "$include_uppercase" = true ]; then handle_uppercase_chars; fiif [ "$include_digits" = true ]; then handle_digits; fi
echo "$res"