40 lines
737 B
Ruby
40 lines
737 B
Ruby
|
require "digest"
|
||
|
|
||
|
input = STDIN.read.chomp
|
||
|
salt = 0
|
||
|
password = []
|
||
|
|
||
|
loop do
|
||
|
digest = Digest::MD5.hexdigest("#{input}#{salt}")
|
||
|
if digest[0...5] == "00000"
|
||
|
password << digest[5]
|
||
|
puts password.join("")
|
||
|
break if password.length >= 8
|
||
|
end
|
||
|
salt += 1
|
||
|
end
|
||
|
|
||
|
part_1 = password.join("")
|
||
|
|
||
|
puts "Part 1: #{part_1}"
|
||
|
|
||
|
salt = 0
|
||
|
to_solve = 8
|
||
|
password = "--------"
|
||
|
loop do
|
||
|
digest = Digest::MD5.hexdigest("#{input}#{salt}")
|
||
|
if digest[0...5] == "00000"
|
||
|
if digest[5].to_i.to_s == digest[5] && digest[5].to_i < 8 && password[digest[5].to_i] == "-"
|
||
|
password[digest[5].to_i] = digest[6]
|
||
|
to_solve -= 1
|
||
|
puts password
|
||
|
end
|
||
|
break if to_solve <= 0
|
||
|
end
|
||
|
salt += 1
|
||
|
end
|
||
|
|
||
|
part_2 = password
|
||
|
|
||
|
puts "Part 2: #{part_2}"
|