Verschlüsselte Daten können in MySQL nicht entschlüsselt werden
In MySQL wird die Funktion AES_ENCRYPT() zum Verschlüsseln von Daten verwendet, während dies bei AES_DECRYPT() der Fall ist Wird zum Entschlüsseln der verschlüsselten Daten verwendet. Bei der Abfrage verschlüsselter Daten können Benutzer jedoch auf ein Problem stoßen, bei dem die entschlüsselten Daten nicht sichtbar sind.
Um dieses Problem zu beheben, ist es wichtig zu verstehen, dass AES_ENCRYPT() eine Binärzeichenfolge zurückgibt, während AES_DECRYPT() die zurückgibt Originalsaite. Daher muss bei der Auswahl verschlüsselter Daten das entschlüsselte Ergebnis explizit in eine Zeichenfolge zurückkonvertiert werden.
Betrachten Sie beispielsweise die folgende Tabelle:
CREATE TABLE `user` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `first_name` VARBINARY(100) NULL, `address` VARBINARY(200) NOT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;
Daten können in die Tabelle eingefügt werden unter Verwendung der Funktion AES_ENCRYPT():
INSERT INTO user (first_name, address) VALUES (AES_ENCRYPT('Obama', 'usa2010'), AES_ENCRYPT('Obama', 'usa2010'));
Bei der Abfrage der verschlüsselten Daten zeigt die folgende Abfrage jedoch nicht das Original an string:
SELECT AES_DECRYPT(first_name, 'usa2010'), AES_DECRYPT(address, 'usa2010') FROM user;
Stattdessen ist das entschlüsselte Ergebnis eine binäre Zeichenfolge, die nicht sichtbar ist. Um dieses Problem zu beheben, kann die Abfrage geändert werden, um die entschlüsselten Daten wieder in eine Zeichenfolge umzuwandeln:
SELECT *, CAST(AES_DECRYPT(first_name, 'usa2010') AS CHAR(50)) first_name_decrypt FROM user
Die Spalte „first_name_decrypt“ enthält jetzt die ursprüngliche Zeichenfolge, sodass Benutzer ihre Daten wie erwartet anzeigen können.
Das obige ist der detaillierte Inhalt vonWarum kann ich verschlüsselte Daten in MySQL nicht entschlüsseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!