我的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中不起作用的人。
提前致谢。