簡體   English   中英

PHP查詢/比較用戶輸入和MySQL中的AES加密數據

[英]PHP Query/Compare user input and aes encrypted data in MySQL

我正在嘗試找到一種通過PHP查詢帶有AES加密表中字段的MySQL表的正確方法。 我有一個登錄表,其中包含last_name以及其他一些字段,並進行查詢以進行比較。 這是相關結構的摘要。

我使用以下方法插入了數據:

AES_ENCRYPT('".$last_name."','".$encryption_key."') 

我可以使用以下方法解密並輸出數據:

CAST(AES_DECRYPT(last_name, '$encryption_key') AS CHAR(66)) last_name_decrypt

但是我無法進行比較。 我試過了

$query = "SELECT * from {$tablename} where last_name = AES_ENCRYPT('".$unauth_last_name."','".$encryption_key."')";

任何幫助或指導表示贊賞。

我認為您缺少與php獲得的姓氏的比較-可能來自登錄html表單。 假設包含您要檢查的姓氏的php變量稱為$in_last_name ,則查詢可能類似於sg,如下所示:

    $query = "SELECT * from {$tablename} WHERE last_name = AES_ENCRYPT('".$in_last_name."','".$encryption_key."')";

(顯然,您應該清理輸入內容或使用帶參數綁定的預處理語句來防止sql注入攻擊。由於我不知道您使用了哪種API連接到MySQL,因此我無法提出確切的解決方案。無論如何,這超出了范圍。這個問題的范圍。)

該查詢對輸入的姓氏(純文本)進行加密,並對照存儲的加密數據對其進行檢查。 另外, where子句中不得有字段別名。

同樣,以這種方式使用字段級加密不會保證數據的安全性,因為它依賴於加密密鑰是秘密的。 這種加密只會使您的生活更加困難。

您可能想了解其他在MySQL中加密數據的方法。 例如,請查看MySQL企業加密 ,它允許DBA管理加密的數據而無需實際訪問純文本版本。 是的,這不是免費產品。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM