В настоящее время пытается прочитать открытый ключ .pem чтобы проверить его через openssl .
/** * Check whether the signed message sent back by the server is * correct or not. */ function check($str, $MAC) { $fp = fopen( dirname(__FILE__) . '/rsa_public_key.pem', 'r' ); $cert = fread($fp, 8192); fclose($fp); $pubkeyid = openssl_get_publickey($cert); return openssl_verify($str, $MAC, $pubkeyid); }
С учетом сказанного, после выполнения моего сценария, я получаю эту ошибку:
openssl_verify(): supplied key param cannot be coerced into a public key in some/path at line X
Первоначально я написал эту функцию, чтобы принять сертификаты .cer . Вот объяснение разницы между всеми этими различными ключевыми форматами . Насколько я понимаю .pem похожи на .cer , однако я не мог для жизни меня выяснить, как разрешить сценарию читать мой файл .pem .
Мой вопрос: что мне нужно сделать, чтобы моя функция читала этот открытый ключ?
EDIT: В некоторых Googling я попытался использовать file_get_contents() для определенного пути, но я бы получил ту же ошибку.
Что может вызвать эту ошибку?
.pem этот файл .pem , все было в одной строке. Кажется, каждая строка требует длины 64 символа, поэтому я убедился, что каждая строка имеет 64 строки и успешно анализируется. Не имел никакого отношения к .cer .
Кроме того, -----BEGIN PUBLIC KEY----- и -----END PUBLIC KEY----- линии должны содержать ровно пять тире с каждой стороны. Не больше, не меньше.
В конце последней строки может быть или не быть новая строка.
Окончания строк Windows (CR / LF) разрешены даже на * nix-размещенном PHP.