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.

Discover more from Saturngod

Subscribe now to keep reading and get access to the full archive.

Continue reading