Я создал открытый ключ, используя следующий код в C #:
using (var rsa = new RSACryptoServiceProvider(2048))
{
rsa.PersistKeyInCsp = false;
m_publicKey = rsa.ExportParameters(false);
}
И экспортировал открытый ключ в файл, используя код из Вот.
Выходной файл выглядит так:
-----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
Я часами искал решение этой проблемы. Я попробовал предложения по поводу символов конца строки, кодировки и т. Д. И т. Д. В Вот, Вот, Вот, Вот, и много других ссылок.
Единственные предложения, которые могут иметь отношение к этой проблеме: Вот а также Вот, но, похоже, это решение для систем Windows, а не Mac OS, поэтому я не смог их опробовать. Ваша помощь в этом очень ценится.
постскриптум все разработки и сервер находятся на Mac (не Windows).
Задача ещё не решена.
Других решений пока нет …