Je suis à la recherche d'un moyen de crypter des données sur leur chemin dans une base de données MySQL, et de les décrypter à la sortie. De plus, j'aimerais pouvoir effectuer des requêtes SQL normales sur ces champs, comme la recherche et la comparaison, ce qui m'empêche d'utiliser une solution PHP pure. Cela m'amène à AES_ENCRYPT() et AES_DECRYPT(), qui peuvent être dupliqués en PHP en utilisant MCRYPT.Problème avec MySQL AES_DECRYPT
J'ai du mal avec AES_DECRYPT et j'ai essayé toutes les suggestions que je peux trouver grâce à des recherches en ligne.
Voilà ma table:
CREATE TABLE IF NOT EXISTS `test_table` (
`id` int(6) NOT NULL,
`secure_info` text NOT NULL,
`encrypted_blob` blob NOT NULL,
`encrypted` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
J'exécute ces requêtes:
INSERT INTO test_table (id, secure_info) VALUES (1,'Testing');
UPDATE test_table SET encrypted = AES_ENCRYPT(secure_info,'key') WHERE id=1 LIMIT 1;
UPDATE test_table SET encrypted_blob = AES_ENCRYPT(secure_info,'key') WHERE id=1 LIMIT 1;
SELECT *, AES_DECRYPT(encrypted,'key') as decrypted, AES_DECRYPT(encrypted_blob,'key') as decrypted_blob FROM test_table WHERE id=1;
Je ne peux pas obtenir la valeur d'origine. 'decrypted' renvoie NULL, et 'decrypted_blob' renvoie 54657374696e67
Des idées, ou peut-être une meilleure solution? AES_ENCRYPT renvoie une chaîne binaire. N'utilisez donc pas de type de colonne de texte.
Tous le cryptage est réversible par définition. Vous confondez une fonction de résumé de message avec un chiffre. traduction md5() n'est pas le cryptage c'est une fonction de hachage. – rook
Si vous souhaitez simplement stocker des valeurs cryptées, vous devez les crypter en PHP et les écrire en tant que blobs. De cette façon, la clé ne quitte jamais PHP donc la base de données n'est pas utile à un attaquant. Ce que vous semblez faire ici, c'est faire le cryptage et le décryptage dans la base de données, qui offre beaucoup moins de protection. Après tout, vous devez maintenant envoyer la clé (texte brut!) Sur le fil à chaque requête. Enfin, Rook a un point, en ce que vous devriez utiliser un résumé si vous stockez un mot de passe, pas de cryptage. –