Replacement of mcrypt in PHP

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.