Signatur
Beschreibung
sodium_crypto_box_publickey() entnimmt einem vollständigen Schlüsselpaar, wie es z. B. von sodium_crypto_box_keypair() oder sodium_crypto_box_keypair_from_secretkey_and_publickey() erzeugt wurde, den öffentlichen Anteil und gibt ihn als Binär-String zurück.
Das Schlüsselpaar ist intern ein binärer Blob, der sowohl den privaten als auch den öffentlichen Schlüssel enthält. Diese Funktion ermöglicht es, den öffentlichen Schlüssel isoliert zu extrahieren, um ihn beispielsweise an einen Kommunikationspartner weiterzugeben, ohne den privaten Schlüssel preiszugeben.
Der zurückgegebene öffentliche Schlüssel hat eine feste Länge von SODIUM_CRYPTO_BOX_PUBLICKEYBYTES Bytes (32 Bytes bei Curve25519). Er kann anschließend z. B. für sodium_crypto_box() oder sodium_crypto_box_open() verwendet werden, wenn man mit dem öffentlichen Schlüssel des Empfängers verschlüsseln möchte.
Typischer Einsatzfall ist die Weitergabe des öffentlichen Schlüssels an andere Teilnehmer eines verschlüsselten Nachrichtenaustauschs, während der private Schlüssel sicher gespeichert bleibt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $key_pair Pflicht | string | Das vollständige Schlüsselpaar als Binär-String, wie es von sodium_crypto_box_keypair() oder sodium_crypto_box_keypair_from_secretkey_and_publickey() erzeugt wurde. Die erwartete Länge beträgt SODIUM_CRYPTO_BOX_KEYPAIRBYTES Bytes. |
Rückgabewert
SODIUM_CRYPTO_BOX_PUBLICKEYBYTES (32) Bytes. Bei einem ungültigen Eingabe-Schlüsselpaar wird eine SodiumException geworfen.Beispiele
Öffentlichen Schlüssel aus einem neuen Schlüsselpaar extrahieren
<?php
// Neues Schlüsselpaar erzeugen
$keyPair = sodium_crypto_box_keypair();
// Öffentlichen Schlüssel extrahieren
$publicKey = sodium_crypto_box_publickey($keyPair);
// Privaten Schlüssel extrahieren
$secretKey = sodium_crypto_box_secretkey($keyPair);
echo 'Länge des öffentlichen Schlüssels: ' . strlen($publicKey) . ' Bytes' . PHP_EOL;
echo 'Erwartete Länge: ' . SODIUM_CRYPTO_BOX_PUBLICKEYBYTES . ' Bytes' . PHP_EOL;
// Öffentlichen Schlüssel Base64-kodiert ausgeben (z. B. zur Weitergabe)
echo 'Öffentlicher Schlüssel (Base64): ' . base64_encode($publicKey) . PHP_EOL;
// Speicher bereinigen
sodium_memzero($secretKey);
sodium_memzero($keyPair);
Asymmetrische Verschlüsselung zwischen zwei Teilnehmern
<?php
// Alice erzeugt ihr Schlüsselpaar
$aliceKeyPair = sodium_crypto_box_keypair();
$alicePublicKey = sodium_crypto_box_publickey($aliceKeyPair);
$aliceSecretKey = sodium_crypto_box_secretkey($aliceKeyPair);
// Bob erzeugt sein Schlüsselpaar
$bobKeyPair = sodium_crypto_box_keypair();
$bobPublicKey = sodium_crypto_box_publickey($bobKeyPair);
$bobSecretKey = sodium_crypto_box_secretkey($bobKeyPair);
// Alice verschlüsselt eine Nachricht für Bob
// Schlüsselpaar aus Alices privatem + Bobs öffentlichem Schlüssel
$aliceToBobKeyPair = sodium_crypto_box_keypair_from_secretkey_and_publickey(
$aliceSecretKey,
$bobPublicKey
);
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
$message = 'Hallo Bob, dies ist eine geheime Nachricht!';
$ciphertext = sodium_crypto_box($message, $nonce, $aliceToBobKeyPair);
// Bob entschlüsselt mit seinem privaten + Alices öffentlichem Schlüssel
$bobToAliceKeyPair = sodium_crypto_box_keypair_from_secretkey_and_publickey(
$bobSecretKey,
$alicePublicKey
);
$decrypted = sodium_crypto_box_open($ciphertext, $nonce, $bobToAliceKeyPair);
echo 'Entschlüsselte Nachricht: ' . $decrypted . PHP_EOL;
// Speicher bereinigen
sodium_memzero($aliceSecretKey);
sodium_memzero($bobSecretKey);
sodium_memzero($aliceKeyPair);
sodium_memzero($bobKeyPair);
// Wichtig · Fallstricke
Sicherheitshinweis: Speichern Sie das vollständige Schlüsselpaar (und insbesondere den privaten Schlüssel) niemals im Klartext in einer Datenbank oder Konfigurationsdatei. Verwenden Sie stattdessen sichere Speicherorte und bereinigen Sie Schlüsselmaterial nach der Verwendung mit sodium_memzero().
Der öffentliche Schlüssel kann gefahrlos weitergegeben werden, da aus ihm nicht der private Schlüssel berechnet werden kann (Einwegfunktion auf Basis von Curve25519).
Wird ein Binär-String übergeben, der nicht die erwartete Länge SODIUM_CRYPTO_BOX_KEYPAIRBYTES hat, wirft die Funktion eine SodiumException. Fangen Sie diese mit einem try/catch-Block ab.