【问题标题】:Reading/Writing password protected and encrypted file in ruby在 ruby​​ 中读/写密码保护和加密文件
【发布时间】:2011-11-10 03:58:06
【问题描述】:

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

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

我已经开始看openpgp,但据我了解,这仍然不能解决密码问题。

【问题讨论】:

    标签: ruby encryption


    【解决方案1】:

    有两种简单的方法可以做到这一点。一种是掏出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
    

    解密程序:

    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 对称块密码。可以使用其他密码。此外,您可能希望将固定字符串连接到密码,以使密钥更长,并帮助将加密/解密与您的应用程序联系起来。

    【讨论】:

    • 你不应该这样做。基本上,这段代码所做的是实现 ECB(电子密码本模式),这非常糟糕,因为它使您接触到广泛的分析技术,从而否定了大多数(如果不是全部)Blowfish 的优势。有关详细信息,请参阅en.wikipedia.org/wiki/…
    【解决方案2】:

    试试encrypted strings gem。像魅力一样工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多