Разработка генератора случайных паролей

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь создавать скрипт для генерации случайных паролей, которые соответствуют определенным требованиям безопасности. Скрипт сгенерирует пароль длиной 12 символов, который включает как минимум одну цифру, одну заглавную букву, одну строчную букву и один специальный символ из набора ><+-{}:.&;. Этот проект предоставит вам практический опыт в написании скриптов и работе со случайными данными.

👀 Предварительный просмотр

$ cd /home/labex/project
$ sh genpass.sh
## Пример
2Dsxw9+xS:27

🎯 Задачи

В этом проекте вы будете:

  • Настраивать проектную среду и создавать необходимый файл скрипта.
  • Реализовывать логику для генерации случайного пароля, который соответствует указанным требованиям к сложности.
  • Тестировать скрипт для генерации паролей, чтобы убедиться, что он работает правильно.

🏆 Достижения

По завершении этого проекта вы сможете:

  • Понять процесс создания скрипта для генерации случайных паролей.
  • Реализовать алгоритм генерации паролей, который удовлетворяет определенным требованиям к типам символов.
  • Тестировать и валидировать сгенерированные пароли, чтобы убедиться, что они соответствуют желаемым критериям.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/test("Condition Testing") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/TextProcessingGroup -.-> linux/tr("Character Translating") linux/VersionControlandTextEditorsGroup -.-> linux/vim("Text Editing") subgraph Lab Skills linux/echo -.-> lab-301485{{"Разработка генератора случайных паролей"}} linux/test -.-> lab-301485{{"Разработка генератора случайных паролей"}} linux/touch -.-> lab-301485{{"Разработка генератора случайных паролей"}} linux/cd -.-> lab-301485{{"Разработка генератора случайных паролей"}} linux/tr -.-> lab-301485{{"Разработка генератора случайных паролей"}} linux/vim -.-> lab-301485{{"Разработка генератора случайных паролей"}} end

Настройка проектной среды

На этом этапе вы подготовите рабочую среду и создадите необходимый файл для скрипта генератора паролей.

  1. Откройте терминал и перейдите в каталог /home/labex/project с помощью команды cd:

    cd /home/labex/project
  2. Создайте новый файл с именем genpass.sh с помощью команды touch. В этом файле вы напишете скрипт для генерации паролей:

    touch genpass.sh
  3. Откройте файл genpass.sh в текстовом редакторе. Вы можете использовать nano, vim или любой другой текстовый редактор по вашему выбору. Добавьте следующую строку shebang в самое начало файла:

    #!/bin/zsh
    
    ## Генератор случайных паролей
    ## Этот скрипт генерирует случайный пароль, который соответствует указанным требованиям.

    Эта строка сообщает системе использовать оболочку zsh для выполнения скрипта. Комментарии после строки shebang дают краткое описание скрипта.

Реализация логики генерации пароля

На этом этапе вы добавите основную логику в скрипт genpass.sh для генерации случайных паролей, которые соответствуют требованиям к сложности.

  1. Внутри файла genpass.sh добавьте следующую функцию для генерации пароля:

    ## Функция для генерации случайного пароля
    generate_password() {
      local length=12
      local password=''
    
      ## Специальные символы
      local special_chars='><+-{}:.&;'
      local special_char="${special_chars:$RANDOM%${#special_chars}:1}"
      password+="$special_char"
    
      ## Цифры
      local digits='0123456789'
      local digit="${digits:$RANDOM%${#digits}:1}"
      password+="$digit"
    
      ## Заглавные буквы
      local upper_case='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
      local upper="${upper_case:$RANDOM%${#upper_case}:1}"
      password+="$upper"
    
      ## Строчные буквы
      local lower_case='abcdefghijklmnopqrstuvwxyz'
      local lower="${lower_case:$RANDOM%${#lower_case}:1}"
      password+="$lower"
    
      ## Оставшиеся символы
      local remaining_length=$((length - 4))
      local characters='><+-{}:.&;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
      local num_characters=${#characters}
    
      for ((i = 0; i < remaining_length; i++)); do
        local random_char="${characters:$RANDOM%$num_characters:1}"
        password+="$random_char"
      done
    
      ## Перемешать порядок символов в пароле
      password=$(echo "$password" | fold -w1 | shuf | tr -d '\n')
    
      echo "$password"
    }

    Эта функция работает следующим образом:

    • Инициализирует пароль одним специальным символом, одной цифрой, одной заглавной буквой и одной строчной буквой, чтобы соответствовать базовым критериям.
    • Вычисляет количество оставшихся символов, чтобы достичь желаемой длины в 12 символов.
    • Случайно выбирает оставшиеся символы из набора цифр, букв (как заглавных, так и строчных) и специальных символов.
    • Перемешивает пароль, чтобы убедиться, что специальные символы не всегда находятся в начале.
  2. Добавьте следующий код в конец файла genpass.sh. Эта часть скрипта вызывает функцию generate_password и выводит сгенерированный пароль в консоль:

    ## Генерировать пароль и вывести его
    generate_password

Тестирование генератора паролей

На этом этапе вы протестируете скрипт genpass.sh, чтобы убедиться, что он генерирует пароли, которые соответствуют всем требованиям.

  1. Сохраните файл genpass.sh в текстовом редакторе.

  2. В терминале сделайте скрипт исполняемым с помощью команды chmod:

    chmod +x genpass.sh

    Эта команда добавляет права на выполнение файла, позволяя запускать его как программу.

  3. Запустите скрипт с помощью следующей команды:

    sh genpass.sh

    Скрипт должен вывести в консоль случайный пароль длиной 12 символов. Вывод должен содержать как минимум один специальный символ, одну цифру, одну заглавную букву и одну строчную букву.

    ## Пример
    2Dsxw9+xS:27
  4. Запустите скрипт еще несколько раз. Каждый раз должен быть сгенерирован другой пароль. Это подтверждает, что случайность в генераторе паролей работает правильно.

Поздравляем! Вы успешно реализовали и протестировали генератор случайных паролей, который соответствует указанным требованиям к сложности.

✨ Проверить решение и практиковаться

Итог

Поздравляем! Вы завершили этот проект и создали скрипт для генерации случайных паролей. Теперь у вас есть фундамент для будущих проектов по написанию скриптов.
Вы можете продолжить практиковаться с помощью других лабораторных работ на LabEx, чтобы дополнительно улучшить свои навыки.