2012-06-06 66 views
2

我收到錯誤Warning: openssl_get_publickey() [function.openssl-get-publickey]: Don't know how to get public key from this private key on line 5試圖從私鑰獲取公鑰時。這裏是我的PHP代碼:PHP OpenSSL錯誤

<?php 
$privatekeyorig = openssl_pkey_new(); 
openssl_pkey_export($privatekeyorig,$privatekey); 
echo '<b>Private Key:</b> ' . $privatekey . '<br>'; 
$publickey = openssl_get_publickey($privatekeyorig); 
echo '<b>Public Key:</b> ' . $publickey . '<br>'; 
?> 

根據PHP手冊,我正確地做到了這一點。任何人發現錯誤?幫助將不勝感激!

回答

1

退房的最後評論http://php.net/manual/en/function.openssl-pkey-new.php

[更新] 從評論前右上面:)和它的作品在我的系統給你一個文本公鑰:

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

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

// Get public key 
$pubkey=openssl_pkey_get_details($res); 
$pubkey=$pubkey["key"]; 
+0

我已經看過 - 它將導出密鑰作爲證書,我希望它是純文本密鑰,就像我生成的私鑰一樣。 –

+0

@ethanh最後一條之前的註釋更有用。我更新了答案。 – walrii

+0

這個答案有什麼問題嗎?我很好奇爲什麼它落選。 – walrii

2

我建議將使用phpseclib, a pure PHP RSA implementation。例如。

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

$rsa = new Crypt_RSA(); 
$rsa->loadKey('...'); 

$privatekey = $rsa->getPrivateKey(); 
$publickey = $rsa->getPublicKey(); 
?> 
+0

不幸的是,我不能在我的主機上安裝任何東西,並且由於OpenSSL已經安裝,我認爲它可能工作。我也不能使用mcrypt,因爲我需要非對稱加密。 –

+2

你不需要安裝任何東西。只需上傳PHP文件即可完成。這就是phpseclib的重點。開發人員竭盡全力確保甚至不需要bcmath或gmp。如果它們可用,則可以使用它們來提高速度,但不是必需的。 – neubert