`openssl_pkey_get_details`只返回`bits`,`key`和`type`值(不能访问[rsa])

时间:2015-05-11 01:17:44

标签: php encryption rsa

我尝试使用有用的JavaScript库JSBN,如this post中所述。

基本上,我想建立一个系统,我使用这个库(在客户端)使用公钥加密,然后使用PHP和私钥在服务器端解密。

我目前有一个主要问题:在实现和尝试我见过的示例中使用的完全相同的代码之后,基本openssl_pkey_get_details函数返回了奇怪的结果。我使用RSA,4096位,' sha512'对于我的公钥,我也使用了我见过其他人在他们的例子中使用的不同类型的密钥。

这是在我的JustHost服务器上运行时产生的openssl_pkey_get_details输出类型:

Array
(
    [bits] => 4096
    [key] => -----BEGIN PUBLIC KEY-----
        MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArLEG2TvFVWV7b5N3ICvN
        tdW8/rF8P2lOLpWuA+yPlia1XVoohKl/UIkCrJUF6aS1d1KPbUa00uskWuH6TGSi
        +A4B3/PWO9MGH2CklHnjeblYF7shGz6zwGK7wtQxpN67j3nOKBvegRolk6FCidTt
        JcFB4+DEfn/avwL6PxLRJYvMoUgHqCQCwh6frIUiwzYttpHB0aOQaSpc4/vXKElq
        C4FAmEGfmhlofHB3b3bnz+fYKyzbCkek51NqMFK4e7Gvek3uSKyzXKKD6LQQcXyT
        /lxvvXWTb3qkoRzZNdrsAVbmIRLBQfYvHkcFQolh/D7WAVd59S+/vhsf+rDfq42O
        Sh4J1ph7dBpcyhzIoNoioCh3SU9fd1mwNG51PFU3AmFUmWPMeuYI47g7Sx+amc0R
        nITC60E4hdvr2H8OO0FGk0nxlVPulVwWT7OfcV4xFU2wLdKawq+ErQwkQWTMh+V+
        rRDKBiFjQPbgRop7EzYlEA6H92KfI/g7mNMVDoUFd6HBF9Hdr2yF1A8N0nfmoHJ7
        q0FDJS/0ZYTnF7r82EBU6PuX1y0r2T9gGh6WQf8c1FvprvPQMz9/UXuyPDJqRfRq
        pWopF53l60yrrpG7LZpo2NyL1TaVeOLlB8rwSeYrPQn6WBpzIf7FxThJPKMqy8EP
        OaJ5DkVyRGP6tqhH75hlHCUCAwEAAQ==
        -----END PUBLIC KEY-----

    [type] => 0
)

注意,type0的形式返回;这应该意味着类型确实是RSA密钥。根据{{​​3}},应该是这样的:在type之上,应该有另一个元素rsa,其中包含ne值。使用JSBN创建RSAKey对象需要这些值,我无法访问它们。

以下是我的一些源代码:

$config = array(
    "digest_alg" => , 'sha512'
    "private_key_bits" => 4096,
    "private_key_type" => OPENSSL_KEYTYPE_RSA
);
// Create the private and public key
$resource = openssl_pkey_new($config);
// Place the private key into $pk
openssl_pkey_export($resource, $pk);
$kh = openssl_pkey_get_private($pk);
$details = openssl_pkey_get_details($kh);
print_r($details);

1 个答案:

答案 0 :(得分:0)

与php 5.2.17相同的问题(在CLI中:php -v),OS Linux,OpenSSL 1.0.1e-fips 2013年2月11日。

@php 5.3.14一切正常并存在$ details ['rsa']:OS Windows,OpenSSL 1.0.1g 2014年4月7日,也适用于@ PHP 5.3.3,OS Linux,OpenSSL 1.0.1f 2014年1月6日

所以,也许问题与openssl版本有关

openssl version

低于2014年1月6日的1.0.1f 或PHP版

php -v

低于5.3。

<强> UPD: 不要使用OS Linux和OpenSSL 1.0.1f返回['rsa'] @php 5.2.17 2014年1月6日。

所以,我的结论是你的服务器在PHP下运行&lt; 5.3.0。

这是对的吗?