Чтение/запись защищенного паролем и зашифрованного файла в ruby

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

Другими словами, файл должен находиться на компьютере в зашифрованном виде, и только пользователи с паролями смогут запускать приложение.

Я начал смотреть на openpgp, но, насколько я понимаю, это все еще не решает проблему с паролем.


person LK__    schedule 09.07.2009    source источник


Ответы (2)


Есть два простых способа сделать это. Один из них - раскошелиться на openssl, чтобы выполнить там шифрование/дешифрование. Возможно, лучшим способом было бы использовать гем Ruby Crypto.

Программа для шифрования:

require 'rubygems'
require 'crypt/blowfish';

puts "Password? "
pw = gets
puts "Secret data? "
data = gets
blowfish = Crypt::Blowfish.new(pw)
r = StringIO.new(data);
File.open('data', 'w') do |f|
  while l = r.read(8) do
    while l.size < 8 do l += "\0" end
    f.print blowfish.encrypt_block(l)
  end
end

Программа для расшифровки:

require 'rubygems'
require 'crypt/blowfish';

puts "Password? "
pw = gets
blowfish = Crypt::Blowfish.new(pw)
r = StringIO.new();
File.open('data', 'r') do |f|
  while l = f.read(8) do
    r << blowfish.decrypt_block(l)
  end
end
puts "Secret data:"
puts r.string

В этом примере используется симметричный блочный шифр Blowfish. Можно использовать и другие шифры. Кроме того, вы, вероятно, захотите соединить фиксированную строку с паролем, чтобы сделать ключ длиннее и помочь связать шифрование/дешифрование с вашим приложением.

person brianegge    schedule 10.07.2009
comment
Вы НЕ должны этого делать. По сути, этот код реализует ECB (режим электронной книги кодов), что очень плохо, потому что он предоставляет вам широкий спектр методов анализа, тем самым сводя на нет большинство (если не все) сильных сторон Blowfish. Подробнее см. en.wikipedia.org/wiki/. - person fdierre; 08.02.2011

Попробуйте гем зашифрованных строк. Работает как шарм.

person Markus Strauss    schedule 09.11.2011