Skip to content

Instantly share code, notes, and snippets.

@pvels
Forked from RiANOl/gist:1077723
Last active October 28, 2015 08:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pvels/762d8fbd020ad60a11b7 to your computer and use it in GitHub Desktop.
Save pvels/762d8fbd020ad60a11b7 to your computer and use it in GitHub Desktop.
AES128 / AES256 CBC with PKCS7Padding in PHP
<?
function aes128_cbc_encrypt($key, $data, $iv) {
if(16 !== strlen($key)|| ctype_xdigit($key)) $key = hash('MD5', $key, true);
if(16 !== strlen($iv) || ctype_xdigit($iv)) $iv = hash('MD5', $iv, true);
$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);
return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
}
function aes256_cbc_encrypt($key, $data, $iv) {
if(32 !== strlen($key)|| ctype_xdigit($key)) $key = hash('SHA256', $key, true);
if(16 !== strlen($iv) || ctype_xdigit($iv)) $iv = hash('MD5', $iv, true);
$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);
return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
}
function aes128_cbc_decrypt($key, $data, $iv) {
if(16 !== strlen($key)|| ctype_xdigit($key)) $key = hash('MD5', $key, true);
if(16 !== strlen($iv) || ctype_xdigit($iv)) $iv = hash('MD5', $iv, true);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
$padding = ord($data[strlen($data) - 1]);
return substr($data, 0, -$padding);
}
function aes256_cbc_decrypt($key, $data, $iv) {
if(32 !== strlen($key)|| ctype_xdigit($key)) $key = hash('SHA256', $key, true);
if(16 !== strlen($iv) || ctype_xdigit($iv)) $iv = hash('MD5', $iv, true);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
$padding = ord($data[strlen($data) - 1]);
return substr($data, 0, -$padding);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment