Okay, nun, das ist das erste Mal, dass ich mit der Verschlüsselung eines Projekts arbeite. Ich verwende meinen Hosting-Provider für SSL, aber ich möchte auch Teile der Datenbank verschlüsseln, die empfindlich sind. Dafür wurde mir gesagt, OpenSSL zu benutzen. Ich teste es auf meinem lokalen Host (WAMP) und habe OpenSSL installiert und die PHP- und Apache-SSL-Mods aktiviert. Okay, also habe ich Tutorials verfolgt und mit mehreren vorgeschlagenen Methoden den öffentlichen Schlüssel generieren und als Datei speichern können. Aus irgendeinem Grund kann ich den privaten Schlüssel nicht generieren. Ich werde zwei Versionen von Code schreiben, die ich versucht habe:OpenSSL wird keine privaten Schlüssel erstellen?
// generate private key
$privateKey = openssl_pkey_new(array(
'private_key_bits' => 1024,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
));
// write private key to file
openssl_pkey_export_to_file($privateKey, 'private.key');
// generate public key from private key
$publicKey = openssl_pkey_get_details($privateKey);
// write public key to file
file_put_contents('public.key', $publicKey['key']);
// clear key
echo $privateKey;
?>
Dies erzeugt eine public.key Datei, sondern bietet mir die Warnungen „openssl_pkey_export_to_file(): nicht Schlüssel aus dem Parameter 1 erhalten können:“ und "openssl_pkey_get_details () erwartet, dass Parameter 1 die Ressource boolean ist. "
Ich habe auch versucht, eine alternative Methode:
$config = array(
"config" => "E:/wamp/bin/apache/apache2.2.22/conf/openssl.cnf",
"digest_alg" => "sha512",
"private_key_bits" => 1024,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
// Create the private and public key
$res = openssl_pkey_new($config);
// Extract the private key from $res to $privKey
openssl_pkey_export($res, $privKey, NULL);
echo "Private Key: ".$privKey;
// Extract the public key from $res to $pubKey
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
echo "Public Key: ".$pubKey;
$data = 'plaintext data goes here';
echo "Data: ".$data;
// Encrypt the data to $encrypted using the public key
openssl_public_encrypt($data, $encrypted, $pubKey);
echo "Encrypted: ".$encrypted;
// Decrypt the data using the private key and store the results in $decrypted
openssl_private_decrypt($encrypted, $decrypted, $privKey);
echo "Decrypted: ".$decrypted;
Dies sollte alles Echo, leider war mein Ergebnis ein leerer privaten Schlüssel, ein feiner öffentlicher Schlüssel, Klartext, und verschlüsselter Text und ein Fehler bei dem Versuch, entschlüsseln: "openssl_private_decrypt(): Schlüsselparameter ist kein gültiger privater Schlüssel"
Offensichtlich habe ich ein Problem mit der Erstellung eines privaten Schlüssels. Ich habe das Internet gründlich durchsucht und konnte es nicht beheben, obwohl ich einfachen Code implementiert habe, der für alle anderen zu funktionieren scheint.
Vielen Dank im Voraus, Elie Zeitouni
Haben Sie den Rückgabewert von Funktionen überprüft? – doptimusprime