J'ai implémenté AES sur mon site web pour des raisons de sécurité et j'ai rencontré un problème que je n'arrive pas à trouver une réponse et je trouve cela plutôt bizarre.PHP + AES Security Glitch
JE CROIS Je sais où il réside mais je ne sais pas comment/où faire le correctif. Actuellement, j'ai PHP 5 et la dernière version de MySQL sur mon serveur local.
Voici un petit test que je cours qui semble fonctionner très bien.
<?php
$fName = "Giesbrecht";
$fNameEncrypt = common::encryptMe($fName);
echo $fNameEncrypt ."<br />";
echo common::decryptMe($fNameEncrypt);
?>
Ma fonction pour l'utilisation en fait la commune: 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);
}
Le problème semble fonctionner quand j'insérer mes valeurs dans mon serveur MySQL. Donc, je pensais que cela aurait pu être mon jeu de caractères, mis à Latin1, et maintenant je suis passé à UTF8 - Unicode UTF-8
D'autres facteurs concernant ma configuration MySQL: J'ai essayé à utiliser le terrain types tels que: varchar, varbinary (où je suis actuellement assis), et le texte d'une longueur de (256 sur tous). J'ai beaucoup de champs de colonne dans ma table, et beaucoup d'entre eux devront être cryptés, bien que je ne fais que tester avec 2 jusqu'à ce que j'ai tout compris. Donc le problème que j'ai rencontré est quand je l'insère dans la base de données et je regarde la valeur dans ma base de données J'ai la valeur des caractères, ils égalent ¥ ÄθLOI "~: é0 (bien que je ' m que le trans-codage ici va modifier) Je l'ai inséré une capture d'écran de la valeur réelle dans la base de données ici:
Mais lorsque je tente de déchiffrer la valeur, je reçois rien, et il fonctionne vide. Il semble qu'il y ait un problème avec tout mot commençant par un CAPITAL "G". Si j'ai un minuscule "g", ça semble fonctionner ...
Je suis complètement perplexe et je n'ai aucune idée de comment résoudre ce problème.
Toute aide serait grandement appréciée. PS. Je suis également curieux de savoir si l'utilisation de PHP AES_Encryption est meilleure ou si MySQL AES_ENCRYPT est meilleur?
Merci.
J'ai maintenant ajouté une nouvelle section de code de travail basé sur des réponses using base64 ... S'il vous plaît informez-moi si quelque chose ne va pas avec cette structure.
<?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']));
}
?>
Vous pensez que le problème réside dans le stockage et la récupération des données dans/depuis la base de données. Pourtant, vous ne nous dites rien sur la base de données (sauf que vous utilisez MySQL). – VolkerK
Désolé VolkerK, j'ai inclus plus d'informations sur mySQL s'il y a quelque chose de spécifique que je serais heureux de fournir. – Justin