PHP+;AES安全故障
为了安全起见,我一直在我的网站上实施AES,我遇到了一个小故障/问题,我无法找到答案,我觉得这很奇怪 我相信我知道它在哪里,但我不知道如何/在哪里进行修复。 目前我在本地服务器上运行PHP5和最新的MySQL 下面是我正在运行的一个小测试,它似乎工作得很好PHP+;AES安全故障,php,aes,Php,Aes,为了安全起见,我一直在我的网站上实施AES,我遇到了一个小故障/问题,我无法找到答案,我觉得这很奇怪 我相信我知道它在哪里,但我不知道如何/在哪里进行修复。 目前我在本地服务器上运行PHP5和最新的MySQL 下面是我正在运行的一个小测试,它似乎工作得很好 <?php $fName = "Giesbrecht"; $fNameEncrypt = common::encryptMe($fName); echo $fNameEncrypt ."<br />"; echo com
<?php
$fName = "Giesbrecht";
$fNameEncrypt = common::encryptMe($fName);
echo $fNameEncrypt ."<br />";
echo common::decryptMe($fNameEncrypt);
?>
因此,当我将我的值插入MySQL服务器时,问题似乎就出现了。所以我想这可能是我的字符集,它被设置为Latin1,现在我移动到了utf8--UTF-8Unicode
有关MySQL设置的其他因素:
我尝试使用字段类型,例如:
varchar、varbinary(我当前所在的位置)和长度为256的文本。我的表中确实有许多列字段,其中许多字段需要加密,尽管我只是在用2进行测试,直到我弄清楚了一切
因此,我遇到的一个小问题是,当我插入数据库时,我实际查看数据库中的值,我有字符值,它们等于¥ÄÎó184; LOI:0(尽管我确信此处的转换编码会修改它),我在此处插入了数据库中实际值的屏幕截图:
但是当我试图解密这个值时,我什么也得不到,结果它是空的。似乎任何以大写字母“G”开头的单词都有问题。如果我有一个小写的“g”,它似乎工作得很好
我完全被这个问题难住了,不知道如何解决这个问题
任何帮助都将不胜感激。
另外,我还想知道使用PHP AES_加密是更好还是使用MySQL AES_加密更好
谢谢
我现在添加了一个新的工作代码部分,该部分基于使用base64的响应。。。
如果此结构有任何问题,请通知我
<?php
$connect = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_select_db(DB_NAME, $connect);
$fName = "Giesbrecht";
$encode = common::cleanUp($fName);
$encode = common::encryptMe($encode);
$encode = base64_encode($encode);
mysql_query("INSERT INTO contacts (userId, firstName, lastName) VALUES ('15', 'Justin', '".$encode."')") or die(mysql_error());
$results = mysql_query("SELECT * FROM contacts WHERE userId = '15'")
or die(mysql_error());
while ($row = mysql_fetch_array($results))
{
echo "<br />FN: ". $row['firstName'];
echo "<br />LNE: ". $row['lastName'];
echo "<br />LN: ". common::decryptMe(base64_decode($row['lastName']));
}
?>
据我所知,PHP中没有AES加密功能(有第三方实现,mcrypt有一个/通常随PHP提供) 大多数实现都会为加密字符串返回一个二进制值(在插入/检索之前尝试base64编码/解码) 当我上一次详细研究这个问题时(令人钦佩的是在不久前),mcrypt返回了一个PHP字符串,其中包含一个C字符串形式的实际加密值(以null结尾)。i、 它通常在值结束后包含额外的字符 嗯
C.您认为在数据库中存储和检索数据是个问题。但是你没有告诉我们关于数据库的任何信息(除了你使用的是MySQL)。对不起,VolkerK,我已经提供了一些关于MySQL的更多信息,如果有什么我很乐意提供的。嗨,Symcbean,我已经添加了一些代码,你使用base64对这些代码进行了评论。。。你觉得这个怎么样?
<?php
$connect = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_select_db(DB_NAME, $connect);
$fName = "Giesbrecht";
$encode = common::cleanUp($fName);
$encode = common::encryptMe($encode);
$encode = base64_encode($encode);
mysql_query("INSERT INTO contacts (userId, firstName, lastName) VALUES ('15', 'Justin', '".$encode."')") or die(mysql_error());
$results = mysql_query("SELECT * FROM contacts WHERE userId = '15'")
or die(mysql_error());
while ($row = mysql_fetch_array($results))
{
echo "<br />FN: ". $row['firstName'];
echo "<br />LNE: ". $row['lastName'];
echo "<br />LN: ". common::decryptMe(base64_decode($row['lastName']));
}
?>