2013-05-15 12 views
18

Tôi tạo ra bảng người dùngLàm thế nào để sử dụng AES_ENCRYPT và AES_DECRYPT trong mysql

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; 

tôi chèn một hàng:

INSERT into user (first_name, address) VALUES (AES_ENCRYPT('Obama', 'usa2010'),AES_ENCRYPT('Obama', 'usa2010')); 

Để chọn dòng này tôi đã sử dụng:

SELECT AES_DECRYPT(first_name, 'usa2010'), AES_DECRYPT(address, 'usa2010') from user; 

Tôi nhận được kết quả sau đây.Những gì tôi cần làm để xem dữ liệu của tôi.Không có dữ liệu hiển thị cho tôi.

I am unable to see my data

+1

làm việc ở đây http://www.sqlfiddle.com/#!2/31323/2 –

+0

Nhưng tại sao tôi lại nhận được như vậy. Có lý do nào không? – PSR

+0

Phiên bản mysql bạn đang sử dụng là gì? –

Trả lời

26

Theo Manual:

AES_ENCRYPT() mã hóa một chuỗi và trả về một chuỗi nhị phân. AES_DECRYPT() giải mã chuỗi được mã hóa và trả về chuỗi gốc.

Tôi không biết tại sao nó vẫn được trả lại một chuỗi nhị phân trong trường hợp của bạn. Dù sao, hãy thử cách này:

SELECT *, 
     CAST(AES_DECRYPT(first_name, 'usa2010') AS CHAR(50)) first_name_decrypt 
FROM user 

Và sử dụng first_name_decrypt thay vì first_name.

+0

Làm tương tự trên máy chủ của chúng tôi (5.5) –

7

Từ mysql client dòng lệnh không có nhu cầu sử dụng CAST:

mysql> SELECT AES_DECRYPT(AES_ENCRYPT('admin','abc'),'abc'); 

+-----------------------------------------------+ | AES_DECRYPT(AES_ENCRYPT('admin','abc'),'abc') | +-----------------------------------------------+ | admin | +-----------------------------------------------+ 1 row in set (0.00 sec)

mysql> SELECT CAST(AES_DECRYPT(AES_ENCRYPT('admin','abc'),'abc') AS CHAR (50)); 

+------------------------------------------------------------------+ | CAST(AES_DECRYPT(AES_ENCRYPT('admin','abc'),'abc') AS CHAR (50)) | +------------------------------------------------------------------+ | admin | +------------------------------------------------------------------+ 1 row in set (0.02 sec)

Như bạn thấy sử dụng dàn diễn viên trong dòng lệnh là một chút chậm hơn . Nhưng tôi đã thông báo rằng nếu bạn sử dụng một số công cụ như phpmyadmin, thì bạn cần phải sử dụng CAST, nếu không kết quả sẽ là sai.

Các vấn đề liên quan