2010-02-09 79 views
1

我有PHP脚本,其中的密码编码使用 OpenSSL的完成:红宝石等效PHP函数openssl_pkey_get_public

$键= openssl_get_publickey($证书);
openssl_public_encrypt($ pass,$ userPassCrypted,$ key,OPENSSL_PKCS1_PADDING);
openssl_free_key($ key);

现在我试图与红宝石一样

需要 'openssl的' 证书= OpenSSL的:: X509 :: Certificate.new(证书)
PUBLIC_KEY = cert.public_key
passwordSSL = public_key.public_encrypt (密码1)

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

证书相同,但在PHP中的公钥 是:

----- BEGIN PUBLIC KEY ----- ... ----- END PUBLIC KEY -----

在红宝石是:

--- --BEGIN RSA PUBLIC KEY ----- ... ----- END RSA PUBLIC KEY -----

我猜这里是区别(键身也不一样)..

我该如何在PHP中获得与Ruby相同的公钥?或者是 可能通过某种方式转换RSA密钥?

或者我可能需要用另一种方式做到这一点?

任何建议高度赞赏。

回答

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") 

希望这有助于!

UPDATE:啊,好的。是的,我不认为有一种方法可以从OpenSSL输出中删除“RSA”,而不用正则表达式去除它。

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

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

不幸的是,这一个不会帮助。 如果你仔细看,所以你会看到,在一开始我有X509证书...所以我既没有公钥也没有私人只是证书... 此外你的解决方案也会给我RSA密钥... cert .public_key == OpenSSL :: PKey :: RSA我猜 – LiMan 2010-02-09 09:44:55

+0

为您更新! – 2010-02-09 10:46:52

+0

不...只是删除也不会工作,因为键身不一样。 PUBLIC KEY和RSA PUBLIC KEY完全不同的键...... – LiMan 2010-02-09 14:32:43