在ruby中读取/写入受密码保护和加密的文件

LK_*_*K__ 3 ruby encryption

我想加密ruby程序将从中加载数据的文件.另外,我需要程序在启动时提示输入密码,用于解密文件.

换句话说,文件需要在机器上加密,只有拥有密码的用户才能运行该应用程序.

我已经开始关注openpgp,但据我了解,这仍然无法解决密码问题.

bri*_*gge 6

有两种简单的方法可以做到这一点.一种是打开openssl来进行加密/解密.可以说更好的方法是使用Ruby Crypto gem.

加密程序:

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
Run Code Online (Sandbox Code Playgroud)

解密程序:

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
Run Code Online (Sandbox Code Playgroud)

此示例使用Blowfish对称块密码.可以使用其他密码.此外,您可能希望将固定字符串连接到密码,以使密钥更长,并帮助将加密/解密绑定到您的应用程序.

  • 你不应该这样做。这段代码所做的基本上是实现 ECB(电子代码簿模式),这非常糟糕,因为它使您接触到广泛的分析技术,从而否定了大多数(如果不是全部)Blowfish 的强项。有关更多详细信息,请参阅 http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29。 (2认同)