【问题标题】:PHP OpenSSL ErrorPHP OpenSSL 错误
【发布时间】:2012-06-10 01:44:28
【问题描述】:

我在尝试从私钥获取公钥时收到错误 Warning: openssl_get_publickey() [function.openssl-get-publickey]: Don't know how to get public key from this private key on line 5。这是我的 PHP 代码:

<?php
$privatekeyorig = openssl_pkey_new();
openssl_pkey_export($privatekeyorig,$privatekey);
echo '<b>Private Key:</b> ' . $privatekey . '<br>';
$publickey = openssl_get_publickey($privatekeyorig);
echo '<b>Public Key:</b> ' . $publickey . '<br>';
?>

根据 PHP 手册,我这样做是正确的。有人发现错误吗?非常感谢您的帮助!

【问题讨论】:

    标签: php openssl private-key public-key


    【解决方案1】:

    我的建议是使用phpseclib, a pure PHP RSA implementation。例如。

    <?php
    include('Crypt/RSA.php');
    
    $rsa = new Crypt_RSA();
    $rsa->loadKey('...');
    
    $privatekey = $rsa->getPrivateKey();
    $publickey = $rsa->getPublicKey();
    ?>
    

    【讨论】:

    • 不幸的是,我无法在我的主机上安装任何东西,而且由于已经安装了 OpenSSL,我认为它可能会起作用。我也不能使用 mcrypt,因为我需要非对称加密。
    • 你不需要安装任何东西。只需上传 PHP 文件即可。这就是 phpseclib 的全部意义所在。开发人员竭尽全力确保不需要 bcmath 或 gmp。如果它们可用,则使用它们以提高速度,但不是必需的。
    【解决方案2】:

    查看http://php.net/manual/en/function.openssl-pkey-new.php的最后一条评论

    [更新] 从上面的评论中:) 它可以在我的系统上为您提供文本公钥:

    // Create the keypair
    $res=openssl_pkey_new();
    
    // Get private key
    openssl_pkey_export($res, $privkey);
    
    // Get public key
    $pubkey=openssl_pkey_get_details($res);
    $pubkey=$pubkey["key"];
    

    【讨论】:

    • 我已经看过了 - 它正在将密钥作为证书导出,我希望它是纯文本密钥,就像我生成的私钥一样。
    • @ethanh 最后一个之前的评论更有用。我更新了答案。
    • 这个答案有问题吗?我很好奇为什么它被否决了。
    猜你喜欢
    • 2019-06-15
    • 2013-06-14
    • 1970-01-01
    • 2023-04-07
    • 2011-03-16
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多