我需要在我的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"];
?>
答案 0 :(得分:10)
如果你在Windows上,这可能会有所帮助:
OPENSSL应该正常工作。
答案 1 :(得分:1)
检查openssl_error_string
。我的猜测是你的openssl.cnf文件丢失了。
或者,您可以使用phpseclib, a pure PHP RSA implementation来生成密钥。例如
<?php
include('Crypt/RSA.php');
$rsa = new Crypt_RSA();
extract($rsa->createKey());
echo "$privatekey<br />$publickey";
?>
答案 2 :(得分:0)
PHP需要找到你的openssl.cnf。实现此目的的最佳方法是在PATH环境变量中添加它的目录位置。
答案 3 :(得分:0)
我从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
。有了这一切,它应该运作良好。
答案 4 :(得分:0)
您可以使用ParagonIE \ EasyRSA \ KeyPair解决此问题。看一下https://github.com/paragonie/EasyRSA。
答案 5 :(得分:0)
警告:openssl_pkey_export():无法从57行的C:\ xampp \ htdocs \ info.php中的参数1获取密钥
警告:openssl_pkey_get_details()期望参数1为资源,在第60行的C:\ xampp \ htdocs \ info.php中给出布尔值