openssl dh compute key()

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

openssl_dh_compute_key

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

openssl_dh_compute_key — Beräknar delad hemlighet för det publika värdet av fjärr-DH-nyckeln och lokal DH-nyckel

Beskrivning

openssl_dh_compute_key(string $public_key, #[\SensitiveParameter] OpenSSLAsymmetricKey $private_key): string|false

Den delade hemligheten som returneras av `openssl_dh_compute_key()` används ofta som krypteringsnyckel för att hemligt kommunicera med en fjärrpart. Detta är känt som Diffie-Hellman nyckelutbyte.

Varning: Det är viktigt att använda samma DH-parametrar för fjärr- och lokala nyckelpar; annars kommer den genererade hemligheten mellan de två parterna inte att stämma överens.

Notera: ECDH stöds endast från och med PHP 8.1.0 och OpenSSL 3.0.0.

Parametrar

public_key DH-publik nyckel från fjärrparten.

private_key En lokal DH-privat nyckel som motsvarar den publika nyckeln som ska delas med fjärrparten.

Returvärden

Returnerar den delade hemligheten vid framgång eller false vid misslyckande.

Ändringslogg

Version Beskrivning
8.0.0 private_key accepterar nu en OpenSSLAsymmetricKey; tidigare accepterades en resurs av typen OpenSSL key.

Exempel

Exempel #1 Beräkna en delad hemlighet

Först, generera ett privat/publikt DH-nyckelpar lokalt och låt fjärrparten göra detsamma. Vi behöver använda OpenSSL-kommandoradsverktyget.

# generera privat/publik nyckelpar
openssl dhparam -out dhparam.pem 2048
openssl genpkey -paramfile dhparam.pem -out privatekey.pem

# extrahera endast publik nyckel
openssl pkey -in privatekey.pem -pubout -out publickey.pem

Skicka din publika nyckel till fjärrparten. Använd openssl pkey-kommandot för att se den publika nyckeln du kommer att få från fjärrparten.

openssl pkey -pubin -in remotepublickey.pem -text -noout

Exemplet ovan kommer att ge ett resultat liknande:

PKCS#3 DH Public-Key: (2048 bit)
    public-key:
        67:e5:e5:fa:e0:7b:0f:96:2c:dc:96:44:5f:50:02:...
        [...förkortat...]

Använd denna publika nyckel som en parameter till `openssl_dh_compute_key()` för att beräkna den delade hemligheten.

<?php
$remote_public_key = '67e5e5fae07b0f962cdc96445f50029e8dc26c0468b0d11d7566fc63f5e34230b896c145cc0860b4213bddee6688db77d91e1189d45cf27af2f1fe1c779d6f13b8b25600efcb3b6079740298f5f98e3eb56208deca8cc3404a8079d5430617a81956afcc955ee2322dd2147b765a9af13c767635cc7bc1a5f439e5b6ca713f7c3f97e5ab86c1cd0ee6ee04c9e62d807e59c049ebb6644fa8f9bba387b33d76019e2b1694a43730fb35e263be2390b9ef3f464604948f60797a5155d61a1df5d97f4a3eaaacb0d082ccc2e094e054c117830b74084d5a79aeff7f1c04ab23394aae87835543ab7a7c049d2080bbaf5f16a3e320b921478cf87fa860809e617736';

$local_priv_key = openssl_pkey_get_private('file://privatekey.pem');

$shared_secret = openssl_dh_compute_key(hex2bin($remote_public_key), $local_priv_key);
echo bin2hex($shared_secret)."\n";
?>

Se även

Sidslut

Orginalhemsidan på Engelska :https://www.php.net/manual/en/function.openssl-dh-compute-key.php PHP Funktioner Funktionsreferens OpenSSL-funktioner


Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp som har sponsrat Linux.se med webserver.