Устранение ошибки openssl_public_encrypt(): неверный параметр открытого ключа

При работе с шифрованием с открытым ключом с использованием OpenSSL в PHP вы можете столкнуться с сообщением об ошибке «openssl_public_encrypt(): параметр ключа не является допустимым открытым ключом». Эта ошибка обычно возникает, когда параметр ключа, переданный в функцию openssl_public_encrypt(), не является допустимым открытым ключом. В этой статье мы рассмотрим несколько способов устранения этой ошибки, а также приведем примеры кода.

Метод 1: проверка формата открытого ключа
Функция openssl_public_encrypt() требует, чтобы открытый ключ был в определенном формате, например PEM или DER. Убедитесь, что вы предоставляете правильный формат вашего открытого ключа. Давайте рассмотрим пример использования открытого ключа в формате PEM:

// Load the public key from a PEM file
$publicKey = openssl_pkey_get_public(file_get_contents('public_key.pem'));
// Perform encryption using the public key
$data = 'Hello, World!';
openssl_public_encrypt($data, $encrypted, $publicKey);

Метод 2: проверка совместимости пары ключей
Если вы используете пару ключей (открытый ключ и закрытый ключ) для шифрования, убедитесь, что они совместимы. Открытый ключ должен соответствовать закрытому ключу, используемому для дешифрования. Вот пример:

// Load the public key and private key from files
$publicKey = openssl_pkey_get_public(file_get_contents('public_key.pem'));
$privateKey = openssl_pkey_get_private(file_get_contents('private_key.pem'));
// Perform encryption using the compatible key pair
$data = 'Hello, World!';
openssl_public_encrypt($data, $encrypted, $publicKey);

Метод 3. Проверка открытого ключа
Убедитесь, что предоставленный ключ действительно является действительным открытым ключом. Вы можете использовать функцию openssl_pkey_get_details(), чтобы извлечь сведения о ключе и определить, является ли он открытым ключом:

// Load the public key from a PEM file
$publicKey = openssl_pkey_get_public(file_get_contents('public_key.pem'));
// Validate if the key is a public key
$keyDetails = openssl_pkey_get_details($publicKey);
if ($keyDetails['type'] !== OPENSSL_KEYTYPE_RSA_PUBLIC) {
    // Key is not a valid public key
    die('Invalid public key');
}
// Perform encryption using the validated public key
$data = 'Hello, World!';
openssl_public_encrypt($data, $encrypted, $publicKey);

Ошибку «openssl_public_encrypt(): ключевой параметр не является допустимым открытым ключом» можно устранить, проверив, что открытый ключ имеет правильный формат, проверив совместимость пар ключей и проверив открытый ключ перед шифрованием. Следуя этим методам и соответствующим примерам кода, вы сможете преодолеть эту ошибку и успешно использовать функцию openssl_public_encrypt() в своих приложениях PHP.