Il y a trois problèmes avec le code que vous utilisez :
-
Comme d'autres l'ont mentionné, votre code PHP utilise actuellement
MCRYPT_RIJNDAEL_256
considérant que, comme documenté sousAES_ENCRYPT()
: -
Comme d'autres l'ont mentionné, vous appliquez
base64_encode()
pour convertir le résultat binaire de PHP en texte, alors que le résultat MySQL apparaît simplement comme une représentation hexadécimale de son résultat binaire. Vous pouvez soit utiliserTO_BASE64()
dans MySQL depuis v5.6.1 ou bienbin2hex()
en PHP. -
Comme documenté sous
mcrypt_encrypt()
:Alors que MySQL utilise le le rembourrage PKCS7 .
Par conséquent, pour obtenir les mêmes résultats en PHP que ceux que vous affichez actuellement pour MySQL :
<?php
class MySQL_Function {
const PKCS7 = 1;
private static function pad($string, $mode, $blocksize = 16) {
$len = $blocksize - (strlen($string) % $blocksize);
switch ($mode) {
case self::PKCS7:
$padding = str_repeat(chr($len), $len); break;
default:
throw new Exception();
}
return $string.$padding;
}
public static function AES_ENCRYPT($str, $key_str) {
return mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
$key_str, self::pad($str, self::PKCS7),
MCRYPT_MODE_ECB
);
}
}
echo bin2hex(MySQL_Function::AES_encrypt( "Hello World", "password" ));
?>