PHP 5.4.36 Released

openssl_open

(PHP 4 >= 4.0.4, PHP 5)

openssl_openÖffnet versiegelte Daten

Beschreibung

bool openssl_open ( string $sealed_data , string &$open_data , string $env_key , mixed $priv_key_id )

Die Funktion openssl_open() öffnet (entschlüsselt) sealed_data unter Verwendung des privaten Schlüssels, der mit der Schlüsselkennung priv_key_id und dem Umschlagschlüssel env_key verknüpft ist und füllt open_data mit den entschlüsselten Daten. Der Umschlagschlüssel wird bei der Versiegelung erzeugt und kann ausschlieslich für einen bestimmten privaten Schlüssel verwendet werden. Mehr Informationen erhalten Sie bei der Dokumentation zu openssl_seal().

Parameter-Liste

sealed_data

open_data

Bei erfolgreicher Ausführung werden die gelesenen Daten in diesem Parameter zurückgegeben.

env_key

priv_key_id

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.

Beispiele

Beispiel #1 openssl_open() Beispiel

<?php
// Annahme: $sealed und $env_key enthalten versiegelte Daten und unseren
// Umschlagschlüssel; beide haben wir von dem Versiegelnden erhalten

// privaten Schlüssel aus einer Datei holen und vorbereiten
$fp fopen("/src/openssl-0.9.6/demos/sign/key.pem""r");
$priv_key fread($fp8192);
fclose($fp);
$pkeyid openssl_get_privatekey($priv_key);

// entschlüsseln der Daten und speichern in $open
if (openssl_open($sealed$open$env_key$pkeyid)) {
    echo 
"Das sind die geöffneten Daten: "$open;
} else {
    echo 
"Öffnen der Daten nicht möglich!";
}

// löschen des privaten Schlüssels aus dem Speicher
openssl_free_key($pkeyid);
?>

Siehe auch

add a note add a note

User Contributed Notes 2 notes

up
2
sdc
3 years ago
PHP compiled without OpenSSL support? Here's how you can call the openssl command-line utility to achieve the same goal:

<?php
// $sealed and $env_key are assumed to contain the sealed data
// and our envelope key, both given to us by the sealer.

// specify private key file and passphrase
$pkey_file='key.pem';
$pkey_pp='netsvc';

// call openssl to decrypt envelope key
$ph=proc_open('openssl rsautl -decrypt -inkey '.
escapeshellarg($pkey_file).' -passin fd:3',array(
 
0 => array('pipe','r'), // stdin < envelope key
 
1 => array('pipe','w'), // stdout > decoded envelope key
 
2 => STDERR,
 
3 => array('pipe','r'), // < passphrase
),$pipes);
// write envelope key
fwrite($pipes[0],$env_key);
fclose($pipes[0]);
// write private key passphrase
fwrite($pipes[3],$pkey_pp);
fclose($pipes[3]);
// read decoded key, convert to hexadecimal
$env_key='';
while(!
feof($pipes[1])){
 
$env_key.=sprintf("%02x",ord(fgetc($pipes[1])));
}
fclose($pipes[1]);
if(
$xc=proc_close($ph)){
  echo
"Exit code: $xc\n";
}

// call openssl to decryp
$ph=proc_open('openssl rc4 -d -iv 0 -K '.$env_key,array(
 
0 => array('pipe','r'), // stdin < sealed data
 
1 => array('pipe','w'), // stdout > opened data
 
2 => STDERR,
),
$pipes);
// write sealed data
fwrite($pipes[0],$sealed);
fclose($pipes[0]);
// read opened data
//$open=stream_get_contents($pipes[1]);
$open='';
while(!
feof($pipes[1])){
 
$open.=fgets($pipes[1]);
}
fclose($pipes[1]);
if(
$xc=proc_close($ph)){
  echo
"Exit code: $xc\n";
}

// display the decrypted data
echo $open;

?>
up
0
Gareth Owen
5 years ago
Example code, assume mycert.pem is a certificate containing both private and public key.

$cert = file_get_contents("mycert.pem");

$public = openssl_get_publickey($cert);
$private = openssl_get_privatekey($cert);

$data = "I'm a lumberjack and I'm okay.";

echo "Data before: {$data}\n";
openssl_seal($data, $cipher, $e, array($public));

echo "Ciphertext: {$cipher}\n";

openssl_open($cipher, $open, $e[0], $private);
echo "Decrypted: {$open}\n";
To Top