为了安全起见,我一直在我的网站上实现AES,我遇到了一个小故障/问题,我找不到答案,我觉得很奇怪。
我相信我知道它在哪里,但我不知道如何/在哪里进行修复。
目前,我有php5和最新的MySQL在我的本地服务器上运行。
这里有一个小测试,我正在运行,似乎工作得很好。
<?php
$fName = "Giesbrecht";
$fNameEncrypt = common::encryptMe($fName);
echo $fNameEncrypt ."<br />";
echo common::decryptMe($fNameEncrypt);
?>
我的函数用于实际使用共同点:我()
public static function encryptMe ($value)
// USE THE AES ENCRYPTION TO ENCRYPT ANY VALUE
{
include_once('../resources/crypt/AES.php');
$aes = new Crypt_AES();
$aes->setKey(AES_KEY);
return $aes->encrypt($value);
}
因此,当我将值插入MySQL服务器时,问题似乎就出现了。所以我想这可能是我的角色集,设置为拉丁1,现在我已经转移到
utf8—UTF-8 Unicode
有关MySQL设置的其他因素:
我尝试使用字段类型,例如:
varchar、varbinary(我当前所在的位置)和长度为256的文本。我的表中确实有许多列字段,其中许多字段需要加密,尽管我只是用2进行测试,直到我弄清楚了所有内容。
所以我遇到的问题是,当我插入到数据库中,我实际上看到了数据库中的值,我有字符值,它们相等意向书:0(虽然我确信这里的trans-coding会修改它)我在这里插入了数据库中实际值的屏幕截图:
但是当我试图解密这个值时,我什么也得不到,结果它是空的。似乎任何以大写“G”开头的词都有问题。如果我有一个小写的“g”,它似乎工作得很好。。。
任何帮助都将不胜感激。
另外,我还想知道使用PHP-AES\u加密是更好还是使用MySQL-AES\u加密更好?
谢谢。
我现在添加了一段新的工作代码,它基于使用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']));
}
?>