Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP+;AES安全故障_Php_Aes - Fatal编程技术网

PHP+;AES安全故障

PHP+;AES安全故障,php,aes,Php,Aes,为了安全起见,我一直在我的网站上实施AES,我遇到了一个小故障/问题,我无法找到答案,我觉得这很奇怪 我相信我知道它在哪里,但我不知道如何/在哪里进行修复。 目前我在本地服务器上运行PHP5和最新的MySQL 下面是我正在运行的一个小测试,它似乎工作得很好 <?php $fName = "Giesbrecht"; $fNameEncrypt = common::encryptMe($fName); echo $fNameEncrypt ."<br />"; echo com

为了安全起见,我一直在我的网站上实施AES,我遇到了一个小故障/问题,我无法找到答案,我觉得这很奇怪

我相信我知道它在哪里,但我不知道如何/在哪里进行修复。 目前我在本地服务器上运行PHP5和最新的MySQL

下面是我正在运行的一个小测试,它似乎工作得很好

<?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']));  
}

?>