2009-07-09 8 views
3

Je veux crypter un fichier à partir duquel un programme ruby ​​chargera des données. En outre, j'ai besoin du programme pour demander un mot de passe au démarrage qui sera utilisé pour décrypter le fichier. En d'autres termes, le fichier doit rester crypté sur la machine et seuls les utilisateurs ayant un mot de passe pourront exécuter l'application.Lecture/écriture d'un fichier protégé par mot de passe et crypté dans ruby ​​

J'ai commencé à regarder openpgp mais pour autant que je sache, cela ne résout toujours pas le problème du mot de passe.

Répondre

6

Il y a deux façons simples d'y parvenir. L'un est de débourser à openssl pour y faire votre cryptage/décryptage. La meilleure façon serait sans doute d'utiliser le Ruby Crypto gem.

Programme pour encrypter:

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 

Programme pour déchiffrer:

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 

Cet exemple utilise le Cypher bloc symétrique Blowfish. D'autres cyphers pourraient être utilisés. En outre, vous voudrez probablement concaténer une chaîne fixe au mot de passe, pour rendre la clé plus longue et pour lier le cryptage/décryptage à votre application.

+1

Vous ne devriez PAS faire cela. Fondamentalement, ce que fait ce code est de mettre en œuvre le mode ECB (Electronic Code Book) qui est très mauvais car il vous expose à une large gamme de techniques d'analyse, annulant ainsi la plupart (sinon la totalité) des points forts de Blowfish. Voir http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29 pour plus de détails. – fdierre

Questions connexes