Openssl pkey get public: примеры (PHP)

Полное руководство по функции openssl_pkey_get_public в PHP
Раздел: Шифрование (OpenSSL)
openssl_pkey_get_public(OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $public_key): OpenSSLAsymmetricKey|false
Описание функции openssl_pkey_get_public

Функция openssl_pkey_get_public используется для получения ресурса открытого ключа из различных источников данных. Она применяется в процессах шифрования, проверки цифровых подписей и при организации защищенных коммуникаций.

Аргументы функции
  • public_key - принимает строку с ключом в формате PEM, X.509 или ресурс сертификата.
  • passphrase - необязательный аргумент для пароля, если ключ защищен.

Функция возвращает ресурс ключа или объект OpenSSLAsymmetricKey в PHP 8.0+. При ошибке возвращается false.

Базовые примеры использования
Пример с PEM-ключом
$publicKey = '-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz4v3... -----END PUBLIC KEY-----'; $keyResource = openssl_pkey_get_public($publicKey); var_dump($keyResource);
resource(2) of type (OpenSSL key)
Пример с файлом сертификата
$cert = file_get_contents('certificate.pem'); $keyResource = openssl_pkey_get_public($cert); var_dump($keyResource !== false);
bool(true)
Пример с защищенным ключом
$encryptedKey = '-----BEGIN ENCRYPTED PRIVATE KEY----- ...'; $keyResource = openssl_pkey_get_public($encryptedKey, 'myPass123'); var_dump($keyResource);
resource(3) of type (OpenSSL key)
Похожие функции в PHP

Извлекает закрытый ключ. Используется для операций расшифрования и создания подписей.

Алиас для openssl_pkey_get_public с идентичным функционалом.

openssl_pkey_read

Универсальная функция для чтения как открытых, так и закрытых ключей. Рекомендуется для обработки неизвестного типа ключа.

Типичные ошибки
Некорректный формат ключа
$key = 'invalid key data'; $result = openssl_pkey_get_public($key); var_dump($result);
bool(false)
Отсутствие расширения OpenSSL
// При отключенном расширении openssl function_exists('openssl_pkey_get_public');
bool(false)
Передача массива вместо строки
$key = ['data']; $result = openssl_pkey_get_public($key);
Warning: openssl_pkey_get_public() expects parameter 1 to be string, array given
Изменения в версиях PHP
PHP 8.0

Функция возвращает объект OpenSSLAsymmetricKey вместо ресурса. Ресурсы OpenSSL устарели.

PHP 7.4

Добавлена генерация исключений при некорректных параметрах в некоторых случаях.

PHP 5.6

Улучшена обработка парольных фраз для защищенных ключей.

Расширенные примеры
Верификация подписи
Пример php
$publicKey = openssl_pkey_get_public(file_get_contents('public.pem')); $data = 'Проверяемые данные'; $signature = base64_decode($signatureBase64); $result = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256); echo $result === 1 ? 'Подпись верна' : 'Ошибка проверки';
Подпись верна
Шифрование данных
Пример php
$key = openssl_pkey_get_public($pemKey); $plaintext = 'Секретное сообщение'; openssl_public_encrypt($plaintext, $encrypted, $key); echo base64_encode($encrypted);
eW91ciBlbmNyeXB0ZWQgZGF0YQ==
Извлечение деталей ключа
Пример php
$keyResource = openssl_pkey_get_public($pemKey); $details = openssl_pkey_get_details($keyResource); echo 'Тип: ' . $details['type'] . '\n'; echo 'Биты: ' . $details['bits'] . '\n';
Тип: 0 Биты: 2048
Работа с X.509 сертификатом
Пример php
$cert = openssl_x509_read(file_get_contents('cert.crt')); $publicKey = openssl_pkey_get_public($cert); $details = openssl_pkey_get_details($publicKey); print_r($details['key']);
-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----
Обработка нескольких ключей
Пример php
$keys = ['key1.pem', 'key2.pem']; foreach($keys as $file) { $key = openssl_pkey_get_public(file_get_contents($file)); if($key) { echo "Ключ $file загружен\n"; } }
Ключ key1.pem загружен Ключ key2.pem загружен
Аналоги в других языках
Python (cryptography)
from cryptography.hazmat.primitives import serialization with open("public.pem", "rb") as key_file: public_key = serialization.load_pem_public_key(key_file.read())
JavaScript (Node.js crypto)
const crypto = require('crypto'); const publicKey = `-----BEGIN PUBLIC KEY-----...`; const keyObject = crypto.createPublicKey(publicKey);

Openssl pkey get public в MySQL

Функция ASYMMETRIC_DER_PUBLIC() извлекает открытый ключ из DER-формата. Отличается ограниченной поддержкой форматов.

PHP openssl_pkey_get_public function comments

En
Openssl pkey get public Extract public key from certificate and prepare it for use