【问题标题】:openssl_seal problemsopenssl_seal 问题
【发布时间】:2012-05-02 21:54:33
【问题描述】:

我在使用 PHP 中的 openssl_seal 函数加载用于加密的公钥时遇到了一些问题...

我已经使用 openSSL 命令行工具创建了公钥和私钥:

openssl genrsa -des3 -out private.pem 1024

openssl rsa -in private.pem -out public.pem -outform PEM -pubout

但是,当我在我的 PHP 代码中运行它时,我收到以下错误:

openssl_seal() [function.openssl-seal]: Don't know how to get public key from this private key
openssl_seal() [function.openssl-seal]: not a public key (1th member of pubkeys)

当我使用:openssl verify public.pem 验证公钥时,我得到:

unable to load certificate
1876:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib
.c:648:Expecting: TRUSTED CERTIFICATE

有人知道为什么会这样吗?

PHP 代码:

public function encrypt($valueToEncrypt, $publicKeyFile)
{
    $pk = file_get_contents($publicKeyFile);
    $publicKey = openssl_pkey_get_public($pk);

    $encrypted = '';
    $a_envelope = array();
    $a_key = array($publicKey);
    if (openssl_seal($valueToEncrypt, $encrypted, $a_envelope, $a_key) === FALSE)
            {
                while ($msg = openssl_error_string())
                    echo $msg . "<br />\n";
                die('Failed to encrypt data!');
            }
            openssl_free_key($publicKey);
....

【问题讨论】:

  • 请添加您的 PHP 代码。没有它,很难看出有什么问题。从消息的外观来看,虽然我假设您正在传递一个私钥,但您应该传递一个公钥。
  • 已添加代码...检查文件,它是公钥。也得到这个:错误:0906D06C:PEM 例程:PEM_read_bio:加载公钥时没有开始行

标签: php openssl


【解决方案1】:

对于遇到相同问题的任何人,该问题与在 Windows 上安装 xampp 有关。在命令行上运行全新安装的 php 运行良好。

【讨论】:

    【解决方案2】:

    除了 StuffandBlah 的回答:它实际上与 Windows 上 XAMPP 中的 Apache 和 PHP 中的不同 OpenSSL 版本有关。这是a post 解决问题的方法(复制 DLL)。

    【讨论】:

      猜你喜欢
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 2020-08-21
      • 1970-01-01
      • 2011-10-12
      • 2023-03-19
      相关资源
      最近更新 更多