php openssl_pkey_export和“无法从参数1获取密钥”

r6hnlfcb  于 2023-10-15  发布在  PHP
关注(0)|答案(6)|浏览(116)

我需要在我的php项目中使用openssl,所以我使用openssl创建了一个测试php页面。但是,我一直在犯这些错误,我不知道为什么。OpenSSL已启用。
警告:openssl_pkey_export()[function.openssl-pkey-export]:cannot get key from parameter 1 in C:\wamp\www\opensslsample\index.php on line 18
Copyright © 2018 - 2019 www.pk10.com版权所有

<?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"];
?>
a8jjtwal

a8jjtwal1#

如果你在Windows上,这可能会有所帮助:
1.点击开始按钮
1.点击控制面板
1.点击系统和安全
1.单击系统
1.点击高级系统设置
1.单击环境变量
1.在“系统变量”下点击“新建”
1.输入“变量名”OPENSSL_CONF
1.输入“变量值”。
Wamp - C:\wamp\bin\apache\Apache2.2.17\conf\openssl.cnf
Xampp - C:\xampp\apache\conf\openssl.cnf
1.点击“确定”并关闭所有窗口并重新启动计算机。
OPENSSL应该可以正常工作。

juzqafwq

juzqafwq2#

检查openssl_error_string。我的猜测是你的openssl.cnf文件丢失或什么的。
或者,您可以使用phpseclib, a pure PHP RSA implementation来生成密钥。eg.

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

$rsa = new Crypt_RSA();

extract($rsa->createKey());

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

oo7oh9g93#

我从phpseclib中提取来修复它在jose-jwt lib中,它工作了,你需要这几个变化:

<?php

$config = array();
$config['config'] = dirname(__FILE__) . '/openssl.cnf';

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

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

这个极简配置文件:

# minimalist openssl.cnf file for use with phpseclib

HOME            = .
RANDFILE        = $ENV::HOME/.rnd

[ v3_ca ]

名称:openssl.cnf有了这一切,它应该工作得很好。

okxuctiv

okxuctiv4#

PHP需要找到你的openssl.cnf。最好的方法是在PATH环境变量中添加它的目录位置。

falq053o

falq053o5#

您可以使用ParagonIE\EasyRSA\KeyPair来解决此问题。看看https://github.com/paragonie/EasyRSA

x6h2sr28

x6h2sr286#

在Windows中,您可以按照以下步骤解决openssl问题:
1.右击“我的电脑”图标
1.点击“属性”
1.点击“高级系统设置”
1.点击“环境变量”
1.在“系统变量”下点击“新建”
1.输入变量名称:OPENSSL_CONF”和变量值(xampp服务器):“D:\xampp\apache\conf\openssl.cnf”和(wamp服务器):“D:\wamp\bin\apache\Apache2.2.17\conf\openssl.cnf”
1.点击“确定”并关闭所有窗口并重新启动计算机。
OPENSSL应该可以工作。

相关问题