我有一些数据已经加密存储在我的一个数据库中。这些是我想要在db上加密存储的个人详细信息。加密部分(AES_ENCRYPT(fname,$ key)工作正常 - 它以加密的形式存储数据,就像我想要的那样。问题是当用户返回表单时,他们填写了他们的个人详细信息以进行调整那些细节。我希望他们最初输入的数据出现在相应的字段中,以便能够修改它们。解密返回空值,甚至根本没有。这是我的代码:
$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 :(得分:0)
我修复了它 - 这是输入的一个问题:在输入php收到表单中的数据后,我用mysqli_real_escape_string和preg_replace清理了数据,所以无论出于什么原因,没有任何东西进入db首先,或者它以某种方式添加了其他字符。相当奇怪,因为我将输入仅限制为数字和字母,但这是一个不同类型的问题:)无论如何,在将“强制转换”添加到选择查询后,它就像一个魅力!
施放(aes_decrypt(fname,'1234567')作为char)作为fname等...(更改了键)向我显示了所有数据:)
非常感谢大家的努力!