Забыл сценарий удара опции пароля

Я пытаюсь сделать сценарий удара, который генерирует пароль. Сценарий также имеет опцию "Forgot password". Поскольку пароль имеет случайные символы, трудно помнить, поэтому когда пользователь забывает передачу, это может быть повторно создано, но, конечно, там иметь, чтобы быть вопросами о безопасности.

Я выяснил часть, где я могу задать пользователю 3 вопроса и генерировать пароль. Например: имя пользователя, любимая еда и URL. Первая часть, может казаться, не выясняет, то, где пользователь может повторно создать пароль. Я думаю, что должен так или иначе сохранить 3 переменные (имя пользователя, favoriteFood, URL), но я понятия не имею как. Это - код, который я имею:

#!/bin/bash

pause(){
  read -p "Press [Enter] key to continue..." fackEnterKey
}

one(){
    echo "Enter your usename"
    read username
    echo "Whats your favorite food"
    read favoriteFood
    echo "Enter URL"
    read url
    choose() { echo ${1:RANDOM%${#1}:1} $RANDOM; }
        pass="$({ choose '!@#$%^\&'
        choose '0123456789'
        choose 'abcdefghijklmnopqrstuvwxyz'
        choose 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        for i in $( seq 1 $(( 4 + RANDOM % 8 )) )
            do
                choose '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
            done
        } | sort -R | awk '{printf "%s",$1}')"
    echo "Your pass is:"$pass    
    pause
}
#this is the part where i am stuck 
two(){
    echo "Enter username"
    read username2
    echo "Whats your favorite food"
    read favoriteFood2
    echo "Enter URL"
    read url2
    if [ username==username2 -a favoriteFood==favoriteFood2 -a url==url2 ] #this only works if the scirpt is not closed.
        then 
            echo $pass
        else
            echo "not found"
    fi        
        pause
}

show_menus() {
    clear
    echo "~~~~~~~~~~~~~~~~~~~~~"    
    echo " M A I N - M E N U"
    echo "~~~~~~~~~~~~~~~~~~~~~"
    echo "1. Generate password"
    echo "2. Forgot password"
    echo "3. Exit"
}
read_options(){
    local choice
    read -p "Enter choice [ 1 - 3] " choice
    case $choice in
        1) one ;;
        2) two ;;
        3) exit 0;;
        *) echo -e "${RED}Error...${STD}" && sleep 2
    esac
}
trap '' SIGINT SIGQUIT SIGTSTP
while true
do

    show_menus
    read_options
done
0
задан 10 December 2016 в 16:13

1 ответ

Если Вы хотите смочь воспроизвести тот же сгенерированный пароль, если пользователь вводит те же 3 ответа снова, просто не создавайте случайный пароль, но получайте пароль на основании ответов только. Тем путем Ваш пароль больше не является действительно случайным, но только псевдослучайным (кажется случайным людям, но определяется только входом), но это вероятно меньшая проблема безопасности, чем хранение паролей в простом тексте в базе данных пароля.

я записал короткий пример, который берет в 3 ответах $answer1, $answer2, $answer3 и числовое $length параметр, который определяет выходную длину пароля (максимум 86 символов):

$ answer1=bytecommander
$ answer2=pizza
$ answer3=askubuntu.com
$ length=12

$ printf '%s-%s-%s%n' "$answer1" "$answer2" "$answer3" | sha512sum | xxd -r -p | base64 -w0 | grep -Eo "^.{$length}"
fBuIlC+lXiuW

команда выглядит сложной, но как она работает, на самом деле довольно легко:

  • printf '%s-%s-%s%n' "$answer1" "$answer2" "$answer3" просто связывают три строки ответа вместе с помощью - как разделитель и добавляя новую строку. Можно использовать любой другой метод, который преобразовывает ввод данных пользователем в одну единственную строку, это не имеет значения, пока Вы просто всегда используете то же.
  • sha512sum чтения от стандартного входа (где вывод команды выше передается по каналу) и вычисляет хеш SHA-512 его. Это - строка 129 шестнадцатеричных (0-9, a-f) символы.
  • xxd -r -p преобразовывает шестнадцатеричные символы в двоичный код.
  • base64 -w0 преобразовывает двоичный код для Базирования 64 (a-z, A-Z, 0-9, +,/).
  • grep -Eo "^.{$length}" печать первое $length символы результата. Вы не должны указывать длину, больше, чем 86 (существует 88 символов, но последние два всегда будут ==).
3
ответ дан 28 September 2019 в 01:21

Другие вопросы по тегам:

Похожие вопросы: