PHP rsa从pem文件获取公钥

时间:2011-01-10 16:04:32

标签: php pear

如何从基于rsa 364创建的pem文件获取publickey。 安装的crypt(RSA.php)库仍然低于错误

致命错误:在C:\ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ rsa.php

中调用未定义的方法Crypt_RSA :: loadKey()
$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'; 

获取错误致命错误:在C:\ Program Files \ xxxx \ rsa.php中调用未定义的方法PEAR_Error :: getPublicKey()

尝试了同样的事情openssl_verify。验证是rturning 0 尝试使用384 rsa密钥验证使用base64_encode接收的符号。

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

请帮我解决此问题。非常感谢。

3 个答案:

答案 0 :(得分:1)

根据Crypt_RSA documentation,Crypt_RSA类没有loadKey()方法。您将公钥作为参数的关联数组的一部分传递给构造函数:

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

答案 1 :(得分:0)

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

PEAR的Crypt_RSA不符合PKCS#1,这意味着使用它生成的签名或密文不会与其他语言互操作,它不支持密码私钥,并且多年来一直没有积极维护。 / p>

有关phpseclib的更多信息:

http://phpseclib.sourceforge.net/

答案 2 :(得分:0)

这是如何在php中加载公共密钥,以及如何知道其加密中使用的位数以及如何对数据进行加密。请记住将数据拆分为最大大小为关键字节大小的块。

<?php

// Get the public Key 
$pubKey = file_get_contents("public.key");

//echo $pubKey; echo "<br>";

$res=openssl_get_publickey($pubKey);   //convert pubkey into resource
$array=openssl_pkey_get_details($res); //read the resource details
$chunksize= $array['bits'];            //this is the chunk size 4096


$data = 'plaintext data goes here, please encrypt and decrypt the following data';
openssl_public_encrypt($data, $encrypted, $pubKey);
?>