PHP 7 မှာ mcrypt ကို သုံးလို့ မရတော့ပါဘူး။ mcrypt အစား openssl_encrypt, openssl_decrypt ကို ပြောင်းသုံးဖို့ လိုပါတယ်။ သို့ပေမယ့် mcrypt နဲ့ encrypt လုပ်ထားတာတွေကို openssl_decrypt နဲ့ ပြန်ဖြည်ရင် အဆင်မပြေ သလို openssl_encrypt နဲ့ လုပ်ထားရင် mcrypt_decrypt နဲ့ ပြန်ဖြည်ရင် လွဲနေတာတွေ ရှိပါတယ်။ အဓိကကတော့ padding ပုံစံ ကွာသွားလို့ပါ။ ဒါကြောင့် system အဟောင်းတွေ မှာ အဆင်ပြေအောင် မူရင်း စာ ကို padding ထပ်ဖြည့်ပေးဖို့လိုပါတယ်။
<?php
function aes_128_encrypt($message,$key,$iv) {
$message_padded = $message;
if (strlen($message_padded) % 8) {
$message_padded = str_pad($message_padded,
strlen($message_padded) + 8 - strlen($message_padded) % 8, "\0");
}
return openssl_encrypt( utf8_encode($message_padded),'AES-128-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING , $iv);
}
function aes_128_decrypt($encrypted,$key,$iv) {
$raw = openssl_decrypt($encrypted,'AES-128-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING , $iv);
return rtrim($raw,"\0");
}
$key = "0123456789ABCDEF";
$iv = "0123456789ABCDEF";
//$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, "hello world", MCRYPT_MODE_CBC, $iv);
$encrypted = aes_128_encrypt("123456789",$key,$iv);
var_dump($encrypted);
//$raw = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
$raw = aes_128_decrypt($encrypted,$key,$iv);
var_dump($raw);
Leave a Reply