如何从基于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);**
请帮我解决此问题。非常感谢。
答案 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的更多信息:
答案 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);
?>