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

Mengapa Saya Tidak Boleh Menyahsulit Data Disulitkan dalam MySQL?

Susan Sarandon
Lepaskan: 2024-11-19 03:20:02
asal
748 orang telah melayarinya

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;
Salin selepas log masuk

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'));
Salin selepas log masuk

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;
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan