openssl_pkey_export和"无法从参数1获取密钥"

the*_*s_r 3 php openssl rsa

我需要在我的php项目中使用openssl,所以我使用openssl创建了一个测试php页面.但是,我不断收到这些错误,我不知道为什么.openssl已启用.

警告:openssl_pkey_export()[function.openssl-pkey-export]:无法从第18行的C:\ wamp\www\opensslsample\index.php中的参数1获取密钥

警告:openssl_pkey_get_details()期望参数1为资源,布线在第21行的C:\ wamp\www\opensslsample\index.php中给出

<?php
 //echo phpinfo();

   $privateKey = openssl_pkey_new(array(
'private_key_bits' => 1024,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
));

openssl_pkey_export($privateKey, $privkey,"123");

$pubkey=openssl_pkey_get_details($privateKey);
$pubkey=$pubkey["key"];
?>
Run Code Online (Sandbox Code Playgroud)

小智 12

如果您在Windows上,这可能会有所帮助:

  1. 单击"开始"按钮
  2. 单击CONTROL PANEL
  3. 单击SYSTEM AND SECURITY
  4. 单击SYSTEM
  5. 单击ADVANCED SYSTEM SETTINGS
  6. 单击ENVIRONMENT VARIABLES
  7. 在"系统变量"下单击"新建"
  8. 输入"变量名称"OPENSSL_CONF
  9. 输入"变量值".我是 - C:\ wamp\bin\apache\Apache2.2.17\conf\openssl.cnf
  10. 单击"确定"并关闭所有窗口并重新启动计算机.

OPENSSL应该正常工作.

  • 第10步至关重要。我尝试了很多在 stackoverflow 和其他博客上找到的解决方案,但没有一个提到您需要重新启动计算机。我花了 3 个小时尝试完成这项工作,但只有在我重新启动电脑后才开始工作。 (5认同)

neu*_*ert 1

查看openssl_error_string。我的猜测是你的 openssl.cnf 文件丢失了或者什么的。

或者,您可以使用phpseclib(一个纯 PHP RSA 实现)来生成密钥。例如。

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

$rsa = new Crypt_RSA();

extract($rsa->createKey());

echo "$privatekey<br />$publickey";
?>
Run Code Online (Sandbox Code Playgroud)