आपके द्वारा उपयोग किए जा रहे कोड में तीन समस्याएं हैं:
-
जैसा कि अन्य ने उल्लेख किया है, आपका PHP कोड वर्तमान में
MCRYPT_RIJNDAEL_256
. का उपयोग कर रहा है जबकि, जैसा किAES_ENCRYPT()के तहत प्रलेखित है। कोड>
: -
जैसा कि अन्य ने उल्लेख किया है, आप
base64_encode()
applying लागू कर रहे हैं PHP के बाइनरी परिणाम को टेक्स्ट में बदलने के लिए, जबकि MySQL परिणाम केवल इसके बाइनरी परिणाम का हेक्साडेसिमल प्रतिनिधित्व प्रतीत होता है। आप या तोTO_BASE64()
MySQL में v5.6.1 से या फिरbin2hex()
पीएचपी में। -
जैसा कि
mcrypt_encrypt()
के तहत प्रलेखित है :जबकि MySQL PKCS7 पैडिंग का उपयोग करता है ।
इसलिए, PHP में वही परिणाम प्राप्त करने के लिए जो आप वर्तमान में 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" ));
?>