我正在尝试解密一堆用于数据库迁移的密码。我有一些较旧的Rails代码(实际上是Runner脚本),可以对它们进行解密。但是,将相同的代码放入Rake任务中会导致任务失败,并带有...针对“secretkey”的未定义方法“to_a”:字符串...

为什么在Rake任务中对字符串调用to_a无效,而在Runner脚本中完全有效?

require 'openssl'

KEY = 'secretkey'

  namespace :import do
  task :users => :environment do
      def decrypt_password(pw)

          cipher = OpenSSL::Cipher::Cipher.new('bf-ecb')
          cipher.decrypt
          cipher.key = KEY.to_a.pack('H*')    <<--------- FAILS RIGHT HERE on to_a

          data = data.to_a.pack('H*')
          data = cipher.update(data)
          data << cipher.final
          unpad(data)

      end
   end

   ... other methods
end

(Rails 3.0.0,Ruby 1.9.2)

最佳答案

在ruby 1.9中,String不再具有to_a方法。您的旧代码可能使用的是Ruby 1.8。

10-01 06:20
查看更多