Rumah >pangkalan data >tutorial mysql >Mengapa Saya Tidak Boleh Menyahsulit Data Disulitkan dalam MySQL?
Tidak Dapat Menyahsulit Data Disulitkan dalam MySQL
Dalam MySQL, fungsi AES_ENCRYPT() digunakan untuk menyulitkan data, manakala AES_DECRYPT() ialah digunakan untuk menyahsulit data yang disulitkan. Walau bagaimanapun, apabila menanyakan data yang disulitkan, pengguna mungkin menghadapi masalah di mana data yang dinyahsulit tidak kelihatan.
Untuk menyelesaikan isu ini, adalah penting untuk memahami bahawa AES_ENCRYPT() mengembalikan rentetan binari, manakala AES_DECRYPT() mengembalikan rentetan asal. Oleh itu, apabila memilih data yang disulitkan, hasil yang disulitkan mesti dibuang semula secara eksplisit ke rentetan aksara.
Sebagai contoh, pertimbangkan jadual berikut:
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;
Data boleh dimasukkan ke dalam jadual menggunakan fungsi AES_ENCRYPT():
INSERT INTO user (first_name, address) VALUES (AES_ENCRYPT('Obama', 'usa2010'), AES_ENCRYPT('Obama', 'usa2010'));
Walau bagaimanapun, apabila menanyakan data yang disulitkan, pertanyaan berikut tidak akan memaparkan rentetan asal:
SELECT AES_DECRYPT(first_name, 'usa2010'), AES_DECRYPT(address, 'usa2010') FROM user;
Sebaliknya, hasil yang disulitkan akan menjadi rentetan binari yang tidak kelihatan. Untuk membetulkan isu ini, pertanyaan boleh diubah suai untuk menghantar semula data yang dinyahsulitkan kepada rentetan aksara:
SELECT *, CAST(AES_DECRYPT(first_name, 'usa2010') AS CHAR(50)) first_name_decrypt FROM user
Lajur first_name_decrypt kini akan mengandungi rentetan asal, yang membolehkan pengguna melihat data mereka seperti yang diharapkan.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menyahsulit Data Disulitkan dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!