Search
Write a publication
Pull to refresh

Простейший генератор паролей в Ruby

image

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

Итак, начнем.



Первый шаг



Сначала мы разберемся, как наш генератор должен работать. Я выбрал слегка необычный метод. Пользователь пишет фразу или слово, которое легко запоминается ему (например девичья фамилия матери) и пишет ключ из 5 цифр, по которому и будет идти изменение первой фразы.

Второй шаг



Теперь напишем алгоритм работы генератора:

  1. Ввод фразы
  2. Ввод ключа
  3. Работа программы:
    • Сопоставление размеров пароля и ключа
    • Перекодировка
    • Вывод


Шаг третий



Для начала, подгрузим файл с функциями (он нам пригодится позже) и попросим ввести пароль и ключ:

load "func.rb"

key = ""
pass = ""
while (pass == "")
puts "Напишите фразу для шифрования:"
pass = gets.strip
end
while (key.class != Fixnum and key.class != Bignum)
puts "Напишите ключ для шифрования:"
key = gets.strip.to_i
end


За одно, идет проверка заполнения данных переменных. Думаю, что этот кусок кода всем понятен.

Дальше, убираем лишние знаки в пароле (у меня это только пробелы), и вносим еще одну переменную, которая будет текстовым аналогом нашего ключа:

pass.gsub!(" ","")
key_s = key.to_s


Следующим шагом, мы проверяем размеры наших переменных, ведь если не в ключене останется символов, то пароль будет однородным:

if (pass.length > key_s.length)
key_s *= (pass.length/key.to_s.length + 1)
end


Тут я просто копирую строку нужное количество раз, чтобы сравнять с размером пароля.

И последним шагом будет вызов метода(функции), который будет побуквенно кодировать наш пароль:

puts
puts "Ваш пароль:"
pass.length.times do |time|
secure(key_s[time],pass[time])
end


Шаг четвертый



Теперь займемся кодированием:

Создадим метод, который будет выполнять определенные изменения при определенных условиях:

def secure(number,text)

end


сейчас в нем ничего нет, но мы это изменим. Так как ключ у нас числовой, то вариантов всего десять: от единицы до нуля:

def secure(number,text)
if (number == "1")
elsif (number == "2")
elsif (number == "3")
elsif (number == "4")
elsif (number == "5")
elsif (number == "6")
elsif (number == "7")
elsif (number == "8")
elsif (number == "9")
else
end
end


Теперь добавим деление 3 типа:

def secure(number,text)
if (number == "1")
if (text =~ /[a-zа-я]/)
print "."
elsif (text =~ /[A-ZА-Я]/)
print ","
elsif (text =~ /[0-9\s\S]/)
print "!"
end
elsif (number == "2")
...
elsif (number == "9")
else
end
end


Я не парился на счет символов, которые будут выступать как замена, просто ставил первый, который приходил на ум.

Финиш



Главный файл (main.rb):

load "func.rb"

key = ""
pass = ""
while (pass == "")
puts "Напишите фразу для шифрования:"
pass = gets.strip
end
while (key.class != Fixnum and key.class != Bignum)
puts "Напишите ключ для шифрования:"
key = gets.strip.to_i
end

pass.gsub!(" ","")
key_s = key.to_s

if (pass.length > key_s.length)
key_s *= (pass.length/key.to_s.length + 1)
end

puts
puts "Ваш пароль:"
pass.length.times do |time|
secure(key_s[time],pass[time])
end


И файл с функциями (func.rb):

def secure(number,text)
if (number == "1")
if (text =~ /[a-zа-я]/)
print "."
elsif (text =~ /[A-ZА-Я]/)
print ","
elsif (text =~ /[0-9\s\S]/)
print "!"
end
elsif (number == "2")
if (text =~ /[a-zа-я]/)
print "t"
elsif (text =~ /[A-ZА-Я]/)
print "e"
elsif (text =~ /[0-9\s\S]/)
print "x"
end
elsif (number == "3")
if (text =~ /[a-zа-я]/)
print "*"
elsif (text =~ /[A-ZА-Я]/)
print "_"
elsif (text =~ /[0-9\s\S]/)
print "G"
end
elsif (number == "4")
if (text =~ /[a-zа-я]/)
print "q"
elsif (text =~ /[A-ZА-Я]/)
print "Q"
elsif (text =~ /[0-9\s\S]/)
print "8"
end
elsif (number == "5")
if (text =~ /[a-zа-я]/)
print "+"
elsif (text =~ /[A-ZА-Я]/)
print "!"
elsif (text =~ /[0-9\s\S]/)
print "2"
end
elsif (number == "6")
if (text =~ /[a-zа-я]/)
print "X"
elsif (text =~ /[A-ZА-Я]/)
print "&"
elsif (text =~ /[0-9\s\S]/)
print "P"
end
elsif (number == "7")
if (text =~ /[a-zа-я]/)
print "5"
elsif (text =~ /[A-ZА-Я]/)
print "3"
elsif (text =~ /[0-9\s\S]/)
print "z"
end
elsif (number == "8")
if (text =~ /[a-zа-я]/)
print "w"
elsif (text =~ /[A-ZА-Я]/)
print "q"
elsif (text =~ /[0-9\s\S]/)
print "7"
end
elsif (number == "9")
if (text =~ /[a-zа-я]/)
print "#"
elsif (text =~ /[A-ZА-Я]/)
print "T"
elsif (text =~ /[0-9\s\S]/)
print "8"
end
else
if (text =~ /[a-zа-я]/)
print "A"
elsif (text =~ /[A-ZА-Я]/)
print "b"
elsif (text =~ /[0-9\s\S]/)
print "0"
end
end
end


PS: Спасибо за внимание!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.