PHP OpenSSL je rozšíření, které umožňuje použití šifrovacích funkcí na základě knihovny OpenSSL. Toto rozšíření je široce využívané pro zabezpečení dat, vytváření digitálních certifikátů a hashování. Níže je přehled základních kroků a příkladů, jak používat PHP OpenSSL pro různé šifrovací úkony.
Jak povolit PHP OpenSSL
Než začneme používat PHP OpenSSL, musíte se ujistit, že rozšíření je ve vašem prostředí nainstalováno a povoleno. Můžete to zkontrolovat následujícím příkazem:
<?php
phpinfo();
?>
Vyhledejte sekci OpenSSL. Pokud zde není, budete muset doinstalovat rozšíření. Na serverech běžících na systémech Linux to může být provedeno například příkazem:
sudo apt-get install php-openssl
Šifrování pomocí symetrického klíče
Symetrické šifrování je proces, kdy je pro šifrování a dešifrování použit stejný klíč. PHP OpenSSL nabízí jednoduché metody pro šifrování a dešifrování s využitím algoritmů jako AES.
Krok 1: Definování šifrovacího algoritmu, klíče a inicializačního vektoru (IV):
<?php
$data = "Tajná zpráva";
$key = "tajny_klic";
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$cipher_method = 'aes-256-cbc';
?>
Krok 2: Šifrování dat:
<?php
$encrypted_data = openssl_encrypt($data, $cipher_method, $key, 0, $iv);
?>
Krok 3: Dešifrování dat:
<?php
$decrypted_data = openssl_decrypt($encrypted_data, $cipher_method, $key, 0, $iv);
?>
Asymetrické šifrování pomocí veřejného a soukromého klíče
Asymetrické šifrování využívá pár klíčů – veřejný a soukromý. Data šifrovaná veřejným klíčem lze dešifrovat pouze soukromým klíčem a naopak.
Krok 1: Generování klíčového páru:
<?php
$config = array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
$res = openssl_pkey_new($config);
openssl_pkey_export($res, $priv_key);
$pub_key = openssl_pkey_get_details($res)['key'];
?>
Krok 2: Šifrování dat veřejným klíčem:
<?php
$public_key = openssl_pkey_get_public($pub_key);
openssl_public_encrypt($data, $encrypted_data, $public_key);
?>
Krok 3: Dešifrování dat soukromým klíčem:
<?php
$private_key = openssl_pkey_get_private($priv_key);
openssl_private_decrypt($encrypted_data, $decrypted_data, $private_key);
?>
Digitální podpisy pomocí OpenSSL
Digitální podpisy zajišťují integritu dat a ověřují identitu odesílatele. Následující kroky ukazují, jak podepsat zprávu a ověřit podpis pomocí PHP OpenSSL.
Krok 1: Vytvoření digitálního podpisu:
<?php
openssl_sign($data, $signature, $private_key, OPENSSL_ALGO_SHA256);
?>
Krok 2: Ověření podpisu:
<?php
$verification = openssl_verify($data, $signature, $public_key, OPENSSL_ALGO_SHA256);
?>
Pokud vrátí hodnota $verification
1, je podpis platný. Pokud vrátí 0, podpis je neplatný.
Práce s certifikáty
OpenSSL umožňuje pracovat s X.509 certifikáty, které jsou klíčové pro zabezpečení komunikace na internetu, zejména v HTTPS.
Krok 1: Načtení certifikátu:
<?php
$cert = file_get_contents('cert.pem');
?>
Krok 2: Získání informací z certifikátu:
<?php
$cert_info = openssl_x509_parse($cert);
?>
Krok 3: Ověření certifikátu:
<?php
$public_key_from_cert = openssl_pkey_get_public($cert);
$cert_verification = openssl_x509_check_private_key($cert, $private_key);
?>
Závěr
PHP OpenSSL je velmi mocným nástrojem pro práci s šifrováním, dešifrováním, digitálními podpisy a certifikáty. Znalost základních operací jako symetrické a asymetrické šifrování nebo práce s certifikáty je klíčová pro bezpečnou práci s daty.