2011-01-10 318 views
2

如何從它基於RSA 364 安裝的crypt(RSA.php)庫中創建PEM文件獲取公鑰仍然得到以下錯誤PHP RSA得到的PEM文件公鑰

致命錯誤:調用未定義的方法Crypt_RSA :: LOADKEY()在C:\ Program Files文件\ Apache軟件基金會\ APACHE2.2 \ htdocs中\ rsa.php

$file = "C:\key_file.pem"; 
$keypair = Crypt_RSA_KeyPair::fromPEMString(file_get_contents($file)); 
$public_key = $keypair->getPublicKey(); 
$rsa_pub_key = Crypt_RSA_Key::fromString($public_key->toString()); 
$rsa_obj = new Crypt_RSA; 
$verify_status = $rsa_obj->validateSign($text,$recieved_signed_sign, $rsa_pub_key) ? 'valid' : 'invalid'; 

得到錯誤的致命錯誤:調用未定義的方法PEAR_Error的:: getPublicKey()在C:\ Program Files \ xxxx \ rsa.php

嘗試了同樣的事情openssl_verify。驗證是rturning 0 嘗試使用384 rsa密鑰驗證使用base64_encode收到的標誌。

**$base64DecodedStr = base64_decode("A1a0o8JzF7q12Sr4gJvYjslhg5XVA2fWy28.JyohJ05uyiZGyBpqazqb"); 
$status = openssl_verify($msg,$base64DecodedStr,$pub_key);** 

請幫我解決這個問題。非常感謝。

回答

1

根據Crypt_RSA documentation,Crypt_RSA類沒有loadKey()方法。你通過公共密鑰的構造函數的參數的關聯數組的一部分:

$rsa_obj = new Crypt_RSA(array('public_key' => $publickey)); 
+0

感謝大衛,我改變了代碼如下$文件= 「C:\ key_file.pem」; $ keypair = Crypt_RSA_KeyPair :: fromPEMString(file_get_contents($ file)); $ public_key = $ keypair-> getPublicKey(); $ rsa_pub_key = Crypt_RSA_Key :: fromString($ public_key-> toString()); $ rsa_obj =新的Crypt_RSA; $ verify_status = $ rsa_obj-> validateSign($ text,$ recieved_signed_sign,$ rsa_pub_key)? '有效':'無效';獲取錯誤爲致命錯誤:調用未定義的方法PEAR_Error :: getPublicKey()在C:\ Program Files \ xxxx \ rsa.php – mazheruddin 2011-01-10 17:44:00

0

我的建議:不要使用PEAR的Crypt_RSA而是phpseclib的Crypt_RSA。

PEAR的Crypt_RSA不符合PKCS#1標準,這意味着使用它生成的簽名或ciphertexst不會與其他語言交互操作,不支持密碼私鑰,並且多年來尚未積極維護。在phpseclib

更多信息:

http://phpseclib.sourceforge.net/