php AES-128-CBC mcrypt & openssl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function encrypt_mcrypt($msg, $key, $iv = null) { | |
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); | |
if (!$iv) { | |
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); | |
} | |
$pad = $iv_size - (strlen($msg) % $iv_size); | |
$msg .= str_repeat(chr($pad), $pad); | |
$encryptedMessage = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $msg, MCRYPT_MODE_CBC, $iv); | |
return base64_encode($iv . $encryptedMessage); | |
} | |
function decrypt_mcrypt($payload, $key) { | |
$raw = base64_decode($payload); | |
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); | |
$iv = substr($raw, 0, $iv_size); | |
$data = substr($raw, $iv_size); | |
$result = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv); | |
$ctrlchar = substr($result, -1); | |
$ord = ord($ctrlchar); | |
if ($ord < $iv_size && substr($result, -ord($ctrlchar)) === str_repeat($ctrlchar, $ord)) { | |
$result = substr($result, 0, -ord($ctrlchar)); | |
} | |
return $result; | |
} | |
function encrypt_openssl($msg, $key, $iv = null) { | |
$iv_size = openssl_cipher_iv_length('AES-128-CBC'); | |
if (!$iv) { | |
$iv = openssl_random_pseudo_bytes($iv_size); | |
} | |
$encryptedMessage = openssl_encrypt($msg, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); | |
return base64_encode($iv . $encryptedMessage); | |
} | |
function decrypt_openssl($payload, $key) { | |
$raw = base64_decode($payload); | |
$iv_size = openssl_cipher_iv_length('AES-128-CBC'); | |
$iv = substr($raw, 0, $iv_size); | |
$data = substr($raw, $iv_size); | |
return openssl_decrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); | |
} |
thanks @pzhuchkov.
Was able to replace the old mcrypt with some small changes!
Using "AES-256-CBC" instad of the 128 to replace the MCRYPT_RIJNDAEL_128.
Thanks for the @srsbiz and @oliverdotbecker! That last clue (AES-256-CBC) was instrumental to help my problem!
It worked for me, thank you so much @srsbiz
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
$pad = $ivSize - (strlen($plainText) % $ivSize); $plainText .= str_repeat(chr($pad), $pad);
Very helpful for me. Thank you!