Guest User

Untitled

a guest
Jun 22nd, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. # проверка сложности пароля нейронной сетью
  2.  
  3. class String
  4. def to_vector #вспомогательный метод, переводит строку в массив бит
  5. self.split('').collect {|c| sprintf("%8b", c[0]).split('').collect {|b| b.to_i} }.flatten
  6. end
  7. end
  8.  
  9. class Password #тестовый генератор 8символьных паролей
  10. def self.good # хороший пароль - содержит маленькие и большие буквы, а также цифры
  11. (1..8).to_a.collect { (('0'..'9').to_a+('A'..'Z').to_a+('a'..'z').to_a)[rand(26+26+10)] }.join
  12. end
  13.  
  14. def self.bad #плохой пароль, либо только цифры, либо только буквы
  15. if rand(2) > 0
  16. (1..8).to_a.collect { ('a'..'z').to_a[rand(26)] }.join
  17. else
  18. (1..8).to_a.collect { ('0'..'9').to_a[rand(10)] }.join
  19. end
  20. end
  21. end
  22.  
  23. class Perceptron # простой перцептрон из одного нейрона
  24. def initialize
  25. @w = (1..64).to_a.collect { rand(10) } # случайные веса
  26. @v = 10 # порог
  27. 1000.times do # учим, тысячей хороших и тысячей плохих
  28. teach Password.good, 1
  29. teach Password.bad, -1
  30. end
  31. end
  32.  
  33. def test password # проверка на "хорошесть"
  34. s = 0;
  35. p = password.to_vector
  36. 64.times do |i| # сумма произведений весов на входные данные(биты пароля) > порогового значение - пароль хороший, иначе плохой
  37. s += p[i]*@w[i]
  38. end
  39. return 1 if s >= @v
  40. -1
  41. end
  42.  
  43. def teach password, result # обучение, пароль и результат к немму(1 или -1)
  44. p = password.to_vector
  45. 64.times do |i| # если не сошелся результат, то подгоняем веса
  46. @w[i] += p[i]*result;
  47. end unless (test(password) == result)
  48. end
  49. end
  50.  
  51. p = Perceptron.new # учимся прямо при инициализации
  52. puts p.test(Password.good) # тест - хороший и плохой
  53. puts p.test(Password.bad)
  54.  
  55. res = []
  56. res[1] = "good"
  57. res[2] = "bad"
  58.  
  59. # можно проверять свои пароли
  60. s = ""
  61. puts res[p.test(s)] while (s = gets.chomp) != "quit"
Add Comment
Please, Sign In to add comment