2015-04-28 45 views
0

我有一些數據,我已經存儲在我的數據庫的一個加密。這些是我想要在數據庫中存儲的個人詳細信息。加密部分(AES_ENCRYPT(fname,$ key)工作正常 - 它以加密的形式存儲數據,只是我想要的方式。問題是當用戶返回表單時,他們填寫了他們的個人詳細信息以進行調整。這些細節我想他們最初輸入的數據出現在各自的領域爲他們能夠修改他們的解密返回空值,甚至什麼都沒有這是我的代碼:MYSQL AES_DECRYPT錯誤

$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3"); 

$sql = "SELECT username, AES_DECRYPT(AES_DECRYPT (fname, '$key'),'$key'), 
AES_DECRYPT(AES_DECRYPT (lname, '$key'),'$key'), AES_DECRYPT(AES_DECRYPT 
(address1, '$key'),'$key'), AES_DECRYPT(AES_DECRYPT (address2, '$key'),'$key'), 
AES_DECRYPT(AES_DECRYPT (zip, '$key'),'$key'), AES_DECRYPT(AES_DECRYPT (city, 
'$key'),'$key'), AES_DECRYPT(AES_DECRYPT (country, '$key'),'$key'), 
AES_DECRYPT(AES_DECRYPT (phone, '$key'),'$key') FROM persdetails WHERE username 
= '$_username'"; 

$query = mysqli_query($db_conxpd, $sql); 
$numrows = mysqli_num_rows($query); 
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) { 
$_u = $row['username']; 
$_fname = $row['fname']; 
$_lname = $row['lname']; 
$_addr1 = $row['address1']; 
$_addr2 = $row['address2']; 
$_zippo = $row['zip']; 
$_citys = $row['city']; 
$_cntry = $row['country']; 
$_phone = $row['phone']; 

} 

這確實在解密方面不會返回任何結果,我知道查詢的工作原理是,如果我回顯所有字段,它會返回用戶名,並返回行數。我在這做錯了什麼?

注意:密鑰與我用來加密數據的密鑰相同。

讓我知道你是否需要更多信息。

非常感謝!

+0

將此查詢複製並粘貼到您的phpmyadmin sql中,並運行檢查其是否有效查詢 – Saty

+0

這樣做並返回正確。 - 有效即 –

+0

嘗試AES_DECRYPT(AES_DECRYPT(fname,'$ key'),'$ key')fname創建列的別名並嘗試 – Saty

回答

0

我解決了它 - 這是一個輸入問題:在輸入php收到表單中的數據後,使用mysqli_real_escape_string和preg_replace清理了數據,因此無論出於何種原因,沒有任何內容會進入數據庫在第一個地方,或者有其他字符添加到它。相當奇怪,因爲我將輸入限制爲只包含數字和字母,但這是另一種類型的問題:)無論如何,在向選擇查詢添加「投射」之後,它的工作方式就像一個魅力!

投(AES_DECRYPT(FNAME,「1234567」)爲char)爲FNAME等等......(改變了鍵)顯示我的所有數據:)

非常感謝大家對你的努力!