UPDATE
Ich habe das Problem gefunden, das mein Skript behindert hat. Offenbar hatte es nichts mit der Entschlüsselung zu tun, sondern mit meiner Umleitung. Als ich diesen Codeblock entfernte, begann das Skript schnell zu funktionieren. Ich bin mir immer noch nicht sicher, warum dies das Problem verursacht hat.
// Make sure we have an Order ID
if( ! isset($_GET['id']) && ! isset($_POST['id']) ) {
header("Location: https://www.website.com/orders/");
exit;
}
URSPRÜNGLICHE FRAGE:
Ich habe die Klasse Encryption verwendet, die Sie hier finden: Klasse Verschlüsselung . Ich speichere die Daten in einer MySQL-Datenbank mit dem binären Datentyp VARCHAR (früher habe ich BLOB und TINYBLOB ausprobiert).
Das Ver- und Entschlüsseln funktioniert, allerdings dauert das Entschlüsseln etwa 1 Minute. Die Verschlüsselung ist schnell.
Ich denke, ich sollte auch sagen, dass dies über eine https-Verbindung geschieht (falls das relevant ist).
Ich kann mich nicht erinnern, dass die Entschlüsselung immer so lange gedauert hat. Haben Sie eine Idee, was die Ursache dafür sein könnte? Wenn ich den Entschlüsselungsteil des PHP-Codes auskommentiere und nur die verschlüsselte Zeichenfolge als Echo zurückgebe, geht es schnell.
CODE WIE UNTEN IN DEN KOMMENTAREN VERLANGT
class Encryption
{
const CYPHER = 'blowfish';
const MODE = 'cfb';
const KEY = 'MyPersonalKey';
public function encrypt($plaintext)
{
$td = mcrypt_module_open(self::CYPHER, '', self::MODE, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, self::KEY, $iv);
$crypttext = mcrypt_generic($td, $plaintext);
mcrypt_generic_deinit($td);
return $iv.$crypttext;
}
public function decrypt($crypttext)
{
$plaintext = '';
$td = mcrypt_module_open(self::CYPHER, '', self::MODE, '');
$ivsize = mcrypt_enc_get_iv_size($td);
$iv = substr($crypttext, 0, $ivsize);
$crypttext = substr($crypttext, $ivsize);
if ($iv)
{
mcrypt_generic_init($td, self::KEY, $iv);
$plaintext = mdecrypt_generic($td, $crypttext);
}
return $plaintext;
}
}
Hier ist der Code von der Webseite, wo ich die Variablen aus der MySQL-Zeile gesetzt habe. Ich verwende das $wpdb-Objekt von WordPress.
$order = $wpdb->get_row("SELECT * FROM orders WHERE id = ".$order_id." LIMIT 0,1");
$addons_price = $order->addons_price;
$hooked_package = (isset($_GET['hooked_package'])) ? $_GET['hooked_package'] : $order->hooked_package;
$arrival_date_unix = $order->arrival_date_unix;
$order_data = unserialize($order->order_data);
$preview_total = $order_data['preview_price'] + $addons_price + $order_data['travel_insurance'];
$normal_total = $order_data['normal_price'] + $addons_price + $order_data['travel_insurance'];
$package_price = $order->package_price;
$total_price = $order->total_price;
$billing_cc = Encryption::decrypt($order->billing_cc);
Außerdem ist hier der MySQL-Typ...
`billing_cc` varbinary(255) DEFAULT NULL