Я внедряю AES на свой веб-сайт для безопасности, и я столкнулся с проблемой / проблемой, на которую я не смог найти ответ, и я нахожу его довольно странным.
Я ВЕРИМ, я знаюгде он находится, но я не знаю, как / где это исправить.В настоящее время у меня есть PHP 5 и последняя версия MySQL, запущенная на моем локальном сервере.
Вот небольшой тест, который я запускаю, который, кажется, отлично работает.
<?php
$fName = "Giesbrecht";
$fNameEncrypt = common::encryptMe($fName);
echo $fNameEncrypt ."<br />";
echo common::decryptMe($fNameEncrypt);
?>
Моя функция для фактического использованияобщие: encryptMe ()
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.Поэтому я подумал, что это мог быть мой набор символов, который был установлен на Latin1, и теперь я перешел на utf8 - UTF-8 Unicode
Другие факторы, касающиеся моей настройки MySQL: Iпытался использовать типы полей, такие как: varchar, varbinary (где я сейчас нахожусь) и текст длиной (256 на всех).У меня есть много полей столбцов в моей таблице, и многие из них должны быть зашифрованы, хотя я просто тестирую с 2, пока я все не выясню.
Так что глюк, с которым я столкнулсякогда я вставляю в базу данных и на самом деле смотрю на значение внутри своей базы данных, у меня есть значение символов, они равны ¥ ÄÎó¸LOI „˜: é0 (хотя я уверен, что транс-кодирование здесь изменит его)вставил скриншот фактического значения в базу данных здесь:
Но когда я пытаюсь дешифровать значение, я ничего не получаю, и оно пустое.Кажется, что есть проблема с любым словом, которое начинается с заглавной буквы "G".если у меня есть строчная буква "g", то она, кажется, работает нормально ...
Я полностью озадачен этим и не знаю, как это устранить.
Любая помощь будет принята с благодарностью.PS.Мне также любопытно узнать, лучше ли использовать PHP AES_Encryption или лучше использовать MySQL AES_ENCRYPT?
Спасибо.
Теперь я добавил новый раздел рабочего кода, основанный на ответах с использованием 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']));
}
?>