使用しているコードには3つの問題があります:
-
他の人が言及しているように、あなたのPHPコードは現在
MCRYPT_RIJNDAEL_256
を使用しています 一方、AES_ENCRYPT()コード>
: -
他の人が述べているように、あなたは
base64_encode()
を適用しています PHPのバイナリ結果をテキストに変換しますが、MySQLの結果は単にそのバイナリ結果の16進表現であるように見えます。TO_BASE64()
> MySQLではv5.6.1以降、またはbin2hex()
PHPで。 -
MySQLは
PKCS7パディング を使用します。 。
したがって、現在MySQLで示しているのと同じ結果をPHPで取得するには、次のようにします。
<?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" ));
?>