Openssl get privatekey: примеры (PHP)
openssl_get_privatekey(OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key, ?string $passphrase = null): OpenSSLAsymmetricKey|falseФункция openssl_get_privatekey используется для получения ресурса или объекта закрытого ключа из строкового представления или файла. Это необходимо для операций цифровой подписи, расшифровки данных и аутентификации в криптографических процессах.
Функция принимает два параметра:
- private_key (string) – Строка, содержащая закрытый ключ в формате PEM, или путь к файлу с ключом.
- passphrase (string | null) – Парольная фраза для расшифровки ключа, если он защищен. Необязательный аргумент, по умолчанию null.
Функция возвращает ресурс (resource) типа OpenSSL key в PHP 7 или объект OpenSSLAsymmetricKey в PHP 8. При ошибке возвращается false.
<?php
$privateKeyPem = "-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC2...
-----END PRIVATE KEY-----";
$key = openssl_get_privatekey($privateKeyPem);
var_dump($key);
?>object(OpenSSLAsymmetricKey)#1 (0) {
}<?php
$key = openssl_get_privatekey('file://path/to/key.pem', 'myPassword');
if ($key === false) {
echo 'Ошибка: ' . openssl_error_string();
}
?>object(OpenSSLAsymmetricKey)#1 (0) {
}<?php
$key = openssl_get_privatekey('invalid key');
var_dump($key);
?>bool(false)
- openssl_get_publickey – Получает ресурс открытого ключа. Используется для проверки подписей и шифрования.
- openssl_pkey_get_private – Псевдоним функции openssl_get_privatekey. Полностью идентична.
- openssl_pkey_get_details – Возвращает массив с деталями ключа. Часто используется после получения ключа для извлечения параметров.
- openssl_pkey_new – Генерирует новую пару ключей. Применяется для создания ключей, а не для их загрузки.
Выбор зависит от задачи: для загрузки существующего закрытого ключа применяется openssl_get_privatekey, для генерации нового – openssl_pkey_new.
<?php
$key = openssl_get_privatekey('invalid data');
if ($key === false) {
echo openssl_error_string();
}
?>error:0909006C:PEM routines:get_name:no start line
<?php
$key = openssl_get_privatekey($encryptedKey, 'wrongPassword');
if ($key === false) {
echo openssl_error_string();
}
?>error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
<?php
$key = openssl_get_privatekey($encryptedKey); // Пароль не указан
if ($key === false) {
echo openssl_error_string();
}
?>error:0909006C:PEM routines:get_name:no start line
В PHP 8.0 функция перестала возвращать ресурс (resource). Теперь возвращается объект класса OpenSSLAsymmetricKey. Это изменение является частью общей инициативы по замене ресурсов на объекты.
В PHP 8.2 улучшены сообщения об ошибках, связанных с некорректными паролями или форматами ключей.
<?php
$data = "Важные данные для подписи";
$privateKey = openssl_get_privatekey(file_get_contents('private.pem'), 'pass');
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
echo base64_encode($signature);
?>c2YzU0hQYzVWbWx1YzNOM2FYSmhiV1Z6TDJSdlkzVjBhVzVu...
<?php
$encrypted = base64_decode('...'); // Зашифрованные данные
$privateKey = openssl_get_privatekey('file://key.pem');
openssl_private_decrypt($encrypted, $decrypted, $privateKey);
echo $decrypted;
?>Исходный текст
<?php
$pkcs12 = file_get_contents('certificate.p12');
openssl_pkcs12_read($pkcs12, $certs, 'password');
$privateKey = openssl_get_privatekey($certs['pkey']);
var_dump($privateKey !== false);
?>bool(true)
<?php
$privateKey = openssl_get_privatekey($keyPem);
$details = openssl_pkey_get_details($privateKey);
print_r(['bits' => $details['bits'], 'type' => $details['type']]);
?>Array
(
[bits] => 2048
[type] => 0
)from cryptography.hazmat.primitives import serialization
with open("key.pem", "rb") as key_file:
private_key = serialization.load_pem_private_key(
key_file.read(),
password=b'myPassword',
backend=None
)
print(private_key)<cryptography.hazmat.backends.openssl.rsa._RSAPrivateKey object at 0x7f8b2c1b7d30>
const fs = require('fs');
const crypto = require('crypto');
const privateKey = fs.readFileSync('key.pem', 'utf8');
const keyObject = crypto.createPrivateKey({
key: privateKey,
passphrase: 'myPassword'
});
console.log(keyObject);KeyObject { type: 'private' }MySQL не имеет прямой аналогии для загрузки ключей в память, но поддерживает функции типа ASYMMETRIC_DECRYPT, которые используют ключи, хранящиеся на сервере.
PHP openssl_get_privatekey function comments
- Php openssl get privatekey - аргументы и возвращаемое значение
- Функция php openssl_get_privatekey - описание
- openssl get privatekey - примеры
- openssl get privatekey - похожие методы на php
- openssl_get_privatekey на js, python, mysql
- openssl get privatekey изменения php
- Примеры openssl_get_privatekey на php