У меня есть файл YAML, содержащий имена пользователей и пароли.Дайджест-значение в файле YAML в хеш MD5
Обзор YAML:
users: test: password: test test2: password: test2
Я хочу, чтобы зашифровать значение пароля в хэш MD5 с помощью Digest::MD5
, например:
user:
Lost Bam:
password: testtesttest #<=I want to overwrite this password with a MD5 hash
В Digest есть способ для шифрования хэш-значение? Если да, то как это реализовать в YAML-файле?
md5.rb Источник:
require 'yaml'
require 'digest'
private
def load_file
File.exist?('info.yml') ? YAML.load_file('info.yml') : {users: {}}
end
def read_file
File.read('info.yml')
end
def save_file(hash)
File.open('info.yml', 'w') { |f| f.write(hash.to_yaml)}
end
def add_user
hash = load_file
hash["users"][prompt('Enter username:')] =
{ "password" => prompt('Enter password:') }
puts "Encrypt information?"
information = gets.chomp
case input
when /yes/i
# hash = Digest::MD5.digest(["password"]'value')<-Doesn't work
#
#This is where I want to be able to encrypt the
#value of the password key that was entered by the user
#
# save_file(hash)
else
puts "Add another?"#Not completed yet
end
save_file(hash)
end
main.rb Источник:
require_relative 'md5.rb'
def main
puts <<-END.gsub(/^\s*>/, '')
>
>To load information type "L" to quit system type "Q"
>
END
input = gets.chomp.upcase
case input
when "L"
add_user
when "Q"
exit_system
else
exit_lock
end
end
def exit_system
puts "Exiting..."
exit
end
def exit_lock
puts "Locked out, please contact system administrator"
exit
end
def restart
puts "Encrypt more?"
input = gets.chomp
if input =~ /yes/i
return true
else
exit_system
end
end
def prompt(message)
puts message
gets.chomp
end
main
ли вы имеете в виду переварить значения после чтения из Файл YAML? – Edward
@Edward да, я редактировал вопрос – 13aal
Что значит «определенные вещи» и почему его трудно реализовать в YAML? Укажите код, который показывает, что вы пытаетесь сделать, или показывает, где вы искали, и почему ответы не помогли вам написать код. Как это не ясно, что вы сделали. Пожалуйста, прочитайте «[ask]». –