0

我尝试了以下代码

// Create the keypair
$res=openssl_pkey_new();

// Get private key
openssl_pkey_export($res, $privatekey);

// Get public key
$publickey=openssl_pkey_get_details($res);
$publickey=$publickey["key"];

但我得到这个错误

警告:openssl_pkey_export(): cannot get key from parameter 1 in ... 警告:openssl_pkey_get_details() 期望参数 1 是资源,布尔值在 ...

我已经取消注释extension=php_openssl.dll我的 php.ini 文件。当我签入 phpinfo() 时支持 openssl。没有困惑。我不知道如何解决这个问题。

4

3 回答 3

0

检查以下产生的消息。

var_dump(openssl_error_string());

http://www.php.net/manual/en/function.openssl-error-string.php

于 2013-06-18T03:54:14.443 回答
0

$res应该是资源。这就是回归openssl_pkey_new()。请参阅文档。但它也可以是FALSE

像您看到的错误通常意味着创建资源的函数 hereopenssl_pkey_new()失败了。正如文件所说,

成功时返回 pkey 的资源标识符,错误时返回 FALSE。

所以你需要检查错误。我不熟悉,但openssl_error_string看起来很有希望。

编辑回应:所以问题openssl-not-working-on-windows。这似乎是你的问题。进程找不到您的 openSSL 配置文件。阅读PHP 的 OpenSLL 配置指南

建议,如链接中所述,使用 while 循环读取所有错误消息。如果是相同的错误,请按照说明进行操作。

于 2013-06-18T03:57:59.713 回答
0

我认为您可能对phpseclib 有更好的运气,这是一个纯 PHP RSA 实现tbh。例如。

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();

extract($rsa->createKey());

echo "$publickey<br />$privatekey";
?>

默认情况下会创建一个 1024 位密钥。如果您需要在默认设置之外对其进行自定义,请使用 lmk。

于 2013-06-18T15:26:49.013 回答