Có ba vấn đề với mã bạn đang sử dụng:
-
Như những người khác đã đề cập, mã PHP của bạn hiện đang sử dụng
MCRYPT_RIJNDAEL_256
trong khi, như được ghi lại trongAES_ENCRYPT ()
: -
Như những người khác đã đề cập, bạn đang áp dụng
base64_encode ()
để chuyển đổi kết quả nhị phân của PHP thành văn bản, trong khi kết quả MySQL dường như chỉ là một biểu diễn thập lục phân của kết quả nhị phân của nó. Bạn có thể sử dụngTO_BASE64 ()
trong MySQL kể từ v5.6.1 trở đibin2hex ()
bằng PHP. -
Như được ghi lại trong
mcrypt_encrypt ()
:Trong khi MySQL sử dụng PKCS7 padding .
Do đó, để có được kết quả tương tự trong PHP như bạn đang hiển thị cho 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" ));
?>