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);