2015-04-28 50 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等等......(改变了键)显示我的所有数据:)

非常感谢大家对你的努力!