Ruby模块在linux和windows上表现不同

时间:2011-08-18 03:10:45

标签: ruby-on-rails ruby ruby-on-rails-3

我的ruby-on-rails 3.0.5上有以下模块(在ruby 1.9.5上运行)

require 'openssl'

module Crypto
  def self.create_keys(priv = "rsa_key", pub = "#{priv}_pub", bits = 1024)
    private_key = OpenSSL::PKey::RSA.new(bits)
    File.open(priv, "w+") { |fp| fp << private_key.to_s }
    File.open(pub,  "w+") { |fp| fp << private_key.public_key.to_s }
    private_key
  end

  def self.file_exist?
    File.exist?('rsa_key') && File.exist?('rsa_key_pub')
  end

  class Key
    def initialize(data)
      @public = (data =~ /^-----BEGIN (RSA|DSA) PRIVATE KEY-----$/).nil?
      @key = OpenSSL::PKey::RSA.new(data)
      Rails.logger.debug "STOPPPPPPPPPPPPPPPP"
    end

    def self.from_file(filename)
      file = File.new( filename )
      self.new file.read
    end

    def encrypt(text)
      Base64.encode64(@key.send("#{key_type}_encrypt", text))
      #@key.send("#{key_type}_encrypt", text)
    end

    def decrypt(text)
      @key.send("#{key_type}_decrypt", Base64.decode64(text))
      #@key.send("#{key_type}_decrypt", text)
    end

    def private?
      !@public
    end

    def public?
      @public
    end

    def key_type
      @public ? :public : :private
    end

    def key
      @key
    end
  end
end

在我的本地计算机(Windows)和服务器(linux)上运行此代码会导致:

priv_key = Crypto::Key.from_file('rsa_key')
@pqp = priv_key.key_type

Windows:私人
Linux:公开

但如果我priv_key.key.to_s,两个版本都显示相同的内容 有人知道发生了什么事吗?试图解决这两天。


发现问题,删除正则表达式中字符串字符的结尾解决了所有问题。

def initialize(data)
    @public = (data =~ /^-----BEGIN (RSA|DSA) PRIVATE KEY-----/).nil?
    @key = OpenSSL::PKey::RSA.new(data)
end

正则表达式在windows,rubular和任何其他检查中都能正常工作。 我将这个问题留给任何可以找到它在Linux中不起作用的人。

提前致谢。

0 个答案:

没有答案