Rumah  >  Artikel  >  pangkalan data  >  Mengapa Saya Tidak Boleh Menyahsulit Data Disulitkan dalam MySQL?

Mengapa Saya Tidak Boleh Menyahsulit Data Disulitkan dalam MySQL?

Susan Sarandon
Susan Sarandonasal
2024-11-19 03:20:02686semak imbas

Why Can't I Decrypt Encrypted Data in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn