首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OpenSSL不会创建私钥?

OpenSSL不会创建私钥?
EN

Stack Overflow用户
提问于 2013-06-01 06:35:56
回答 5查看 8K关注 0票数 6

好吧,好吧,这是我第一次在项目中使用加密。我正在使用我的主机提供商的SSL,但我也想加密数据库的敏感部分。为此,我被告知要使用OpenSSL。我正在我的本地主机(WAMP)上测试它,并且已经安装了OpenSSL并打开了PHP和Apache SSL mod。好了,我一直在遵循教程,并使用几种建议的方法,已经能够生成公钥并将其存储为文件。由于某些原因,我似乎不能生成私钥。我将发布我尝试过的两个版本的代码:

// generate private key
$privateKey = openssl_pkey_new(array(
    'private_key_bits' => 1024,
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
));
// write private key to file
openssl_pkey_export_to_file($privateKey, 'private.key');
// generate public key from private key
$publicKey = openssl_pkey_get_details($privateKey);
// write public key to file
file_put_contents('public.key', $publicKey['key']);
// clear key
echo $privateKey;

?>

这将生成一个public.key文件,但提供了警告"openssl_pkey_export_to_file():无法从参数1获取密钥:“和”openssl_pkey_get_details()期望参数1为资源,布尔值“。

我还尝试了另一种方法:

$config = array(
    "config" => "E:/wamp/bin/apache/apache2.2.22/conf/openssl.cnf",
    "digest_alg" => "sha512",
    "private_key_bits" => 1024,
    "private_key_type" => OPENSSL_KEYTYPE_RSA,
);

// Create the private and public key
$res = openssl_pkey_new($config);

// Extract the private key from $res to $privKey
openssl_pkey_export($res, $privKey, NULL);
echo "Private Key: ".$privKey;
// Extract the public key from $res to $pubKey
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
echo "Public Key: ".$pubKey;
$data = 'plaintext data goes here';
echo "Data: ".$data;
// Encrypt the data to $encrypted using the public key
openssl_public_encrypt($data, $encrypted, $pubKey);
echo "Encrypted: ".$encrypted;
// Decrypt the data using the private key and store the results in $decrypted
openssl_private_decrypt($encrypted, $decrypted, $privKey);

echo "Decrypted: ".$decrypted;

这本应反映所有内容,不幸的是,我的结果是一个空白的私钥、一个很好的公钥、明文和加密文本,以及在尝试解密时出现的错误:"openssl_private_decrypt():key参数不是有效的私钥“

显然,我在创建私钥时遇到了问题。我已经彻底地搜索了互联网,还没能修复它,尽管我已经实现了看起来对其他所有人都有效的简单代码。

提前感谢,Elie Zeitouni

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-05 23:41:11

我认为您使用phpseclib, a pure PHP RSA implementation可能会更轻松一些。以下示例将创建1024位RSA私钥/公钥:

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

$rsa = new Crypt_RSA();

extract($rsa->createKey());

echo $privatekey . '<br/>' . $publickey;
?>
票数 3
EN

Stack Overflow用户

发布于 2015-09-03 07:39:26

在xampp php5.5的windows10上运行这个的想法一直困扰着我。最后,我认为tabone上面的答案是正确的,除了路径格式需要向前斜杠!

C:/xampp/php/extras/openssl/openssl.cnf

希望这对某些人有帮助。

票数 4
EN

Stack Overflow用户

发布于 2013-12-18 08:58:16

我也有同样的问题。

这是Windows的问题!

在基于unix的系统上不会发生这种情况。

而且,如果你像我一样只使用Windows进行开发,那么你可以使用PuTTYGen生成一个密钥,并在开发环境中静态地使用它!

OpenSSL not working on Windows, errors 0x02001003 0x2006D080 0x0E064002

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16866994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档