PHP Warning: openssl_public_encrypt(): key parameter is not a valid public key 解决


PHP Warning:  openssl_public_encrypt(): key parameter is not a valid public key

最近用php做openssl rsa 加密解密的时候出现一个问题
意思就是说它不是一个有效的公钥
然后去谷歌查了下,不少人遇到类似的问题,
其中有一道问题是这样的
地址

-----BEGIN PUBLIC KEY-----

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtixUGzGpLXgZ7AV1HfmIHV/FEF

fww77FekRc2oLhUOd4HitwCPo76fjtdsQBEt8w9HZ3CXVphaAU2BA6MEZJ3ShVMsdAXb2ZA1C

lu7k1GV9M/BhucTg35HujSK647Sc5MwVLwFsN80dAnGsZF8gwb2TNUzXHwzbAb30T

01zuqf8RCM75OwKZFYqzu7FOVrtk/w9mh92MOXG0l7WSqNIctu8Kxka/tEJJIA5nq

MGNMocjwprXy66NS7FFy1GY

NnxfFLtODqq0tllc50UCDsnqSvNmj2wcnAcsCzNOoxPPgp7t8S

sQvOzgc5W3CDjIsYEiGD vzSVNkGiRou577wIDAQAB

-----END PUBLIC KEY-----

问题和我差不多,他也是返回一样的错误说不是一个有效的公钥,然后有一位老友回答说

It occured to me why it wasn't working, so I am here to answer my own question. Now that I think about it, it ties into what @sarnold originally said: the + signs are gone (and they got replaced by spaces)
it turns out that because i was getting the key via HTTP POST, it formatted the URL (and thus the key) turning all the + signs into spaces. That threw off the key and caused this conundrum.

Thanks for the help. :)

大概的意思就是说http传输的时候,+号变成空格了,只要将+号改成空格就可以了。
然后我看了下我自己的,没空格的确是加号,看了下,我的是js调用使用的,

yt\/EkdTO

出现\/这样的符号,然后将\/都改成/就可以正常的加解密了

$pub  = file_get_contents('public.key');

$key1 = openssl_get_publickey($pub);

$res  = openssl_public_encrypt($data, $encrypted_data, $key1);

echo base64_encode($encrypted_data);
添加新评论