我使用C#中的以下代码创建了公钥:
using (var rsa = new RSACryptoServiceProvider(2048))
{
rsa.PersistKeyInCsp = false;
m_publicKey = rsa.ExportParameters(false);
}
使用here中的代码将公钥导出到文件中。
输出文件如下所示:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA498EWxuZK/KsUgIEusEt
QOJulgTHwb8C4avtzJnzhosTeKooXvyGFPpex6HcQGSRqrWpNr2yhw1BvJvH2UyE
Jisl5BJA5Za+ofmbGifCFwCllZ37U1YpOmqpB2Yt+yYElGh5dp+lqs5Q3u3nPknd
nLS3bxH7qlZBvR9YPWj9x7IuSXJyopAmdJato8xeNHzmBxWD8FgQKICFpLtGsPXq
XRwT0imTs6/EcMqq6fdlp0OyBKyZjw6t47gMeqiuSYz6k41Nf/SbtIC4snUyoUgI
TvnHjWe1cY7js4kY62A9ZpHX0NpG7JXctxVb+aZOv1rS36bUjcP+bug1W3ZKrTG6
hwIDAQAB
-----END PUBLIC KEY-----
在服务器端,我需要读取密钥文件并使用PHP进行加密/解密。我的PHP代码如下:
$pub_key = file_get_contents("../user_pub_key.crt");
$public_key = openssl_pkey_get_public($pub_key);
var_dump($public_key);
echo openssl_error_string();
虽然显然创建了$ public_key,并且var_dump返回了它的资源编号:
resource(5) of type (OpenSSL key)
但奇怪的是,openssl_error_string()也显示以下错误:
error:0906D06C:PEM routines:PEM_read_bio:no start line
我花了几个小时寻找解决方案。我在here,here,here,here以及更多链接中尝试了有关行尾字符,编码等的建议。
可能与此问题相关的唯一建议是here和here,但这些解决方案似乎适用于Windows系统而非Mac OS,因此我无法尝试使用它们。非常感谢您对此的帮助。
P.S。所有的开发和服务器都在Mac上(不是Windows)。