Ruby等效于php函数openssl_pkey_get_public

时间:2010-02-09 07:39:53

标签: ruby-on-rails security openssl

我有php脚本,其中密码编码使用了 openssl:

$ key = openssl_get_publickey($ certificate);
openssl_public_encrypt($通,$ userPassCrypted,$键,OPENSSL_PKCS1_PADDING);
openssl_free_key($键);

现在我尝试用ruby

做同样的事情

要求'openssl' cert = OpenSSL :: X509 :: Certificate.new(证书)
public_key = cert.public_key
passwordSSL = public_key.public_encrypt(password,1)

这里的问题是这些密码编码不匹配

证书与公钥相同 在PHP中是:

-----开始公钥----- ... ----- END PUBLIC KEY -----

红宝石中的

是:

-----开始RSA公钥----- ... ----- END RSA PUBLIC KEY -----

我猜这里是差异(键体也不一样)......

如何在Ruby中使用与PHP相同的公钥?或者是它 可能以某种方式转换RSA密钥?

或许我必须以另一种方式做到这一点?

高度赞赏任何建议。

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法打开它:

# Public key
public_key = OpenSSL::PKey::RSA.new(File.read("/path/to/public/key"))

# Private key (with password)
private_key = OpenSSL::PKey::RSA.new(File.read("/path/to/private/key), "password")

希望这有帮助!

更新:啊,好的。是的,我认为没有办法从OpenSSL输出中删除“RSA”而不用正则表达式删除它。

cert = OpenSSL::X509::Certificate.new(File.read("/path/to/x509/cert"))

cert.public_key.to_s.gsub(/RSA PUBLIC KEY-----/, "PUBLIC KEY-----")