2011-09-30 29 views
5

Làm cách nào để thực hiện lựa chọn Mysql với WHERE và LIKE serach nếu trường là AES_ENCYPTED?MYSQL CHỌN GIỮA VỚI AES_ENCRYPT

Ví dụ:

SELECT AES_DECRYPT(place,'"+salt+"'),AES_DECRYPT(web_address,'"+salt+"') 
FROM access 
WHERE place= LIKE '%(AES_ENCRYPT('"+searchStr+"','"+salt+"'))',%') 

Về cơ bản, thực hiện tìm kiếm trên một cột được mã hóa với các ký tự đại diện như trên cả hai đầu của $searchStr

+0

là ngôn ngữ gì nó? – genesis

+0

(biến PHP) $ query = (chuỗi tuyên bố MYSQL) – user963206

Trả lời

8

Bạn không thể tìm kiếm trên một cột được mã hóa mà không cần giải mã nó.

Bạn sẽ cần phải thực hiện WHERE AES_DECRYPT(like, salt) LIKE '%something%' nhưng sẽ rất chậm.

+0

Đã thử nhưng không hoạt động nhưng tôi nghĩ rằng bạn đang đi đúng hướng ... (chậm không phải là vấn đề với ứng dụng web nhỏ) – user963206

+0

Tôi sẽ là cụm từ ' nhận xét ở trên - Bạn là LEGEND. Tôi đã có một 'nhỏ' nhỏ trong cách này, cảm ơn bạn. – user963206

+0

Điều này không hoạt động, bất kỳ ai cũng có thể đề xuất bất kỳ cách nào khác để giải mã các giá trị. – Vicky

3

Tôi đã tìm kiếm một cách đơn giản để sử dụng SELECT THÍCH cho trường AES_ENCRYPTED với MySQL. Một trong đó làm việc tốt nhất là:

SELECT * FROM table 
WHERE CONVERT(AES_DECRYPT(`haystack`,'key') USING utf8) LIKE '%needle%' 

Tôi đã thử nghiệm này trên MySQL 5 sử dụng PHP 5.

này chạy rất tốt khi xử lý hàng ngàn hàng, nhưng có thể không lý tưởng cho các bảng rất lớn do để giải mã và chuyển đổi.

Đây là mã PHP cơ bản:

$key = md5("yourchosenkey".$salt);  
$query = "SELECT * FROM ".$tableName." ". 
     "WHERE CONVERT(AES_DECRYPT(`haystack`,'".$key."') USING utf8) ". 
     "LIKE '%".addslashes($needle)."%'";