PHP AES Encrypt string function
Make sure mcrypt is installed and enabled.
#ubuntu: sudo apt-get install php5-mcrypt; sudo php5enmod mcrypt; sudo service apache2 restart;#apache php -r "print_r(mcrypt_list_algorithms());"; #cli
<?php //see: http://php.net/manual/en/book.mcrypt.php $key="9eAU3jgN_BsDAGAaOoAe_vOs1ZFD88Zv"; $original_string = "encrypt me"; $encrypted_hex_string = encryptStringAES($original_string, $key); $decrypted_string = decryptStringAES($encrypted_hex_string, $key); echo $original_string."\n"; echo $encrypted_hex_string."\n"; echo $decrypted_string."\n"; function encryptStringAES($string, $key)//$key expected to be ASCII string length 32 { $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); $key_length = mcrypt_enc_get_key_size($td); $key = substr($key, 0, $key_length ); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_URANDOM ); mcrypt_generic_init($td, $key, $iv); $encrypted_data_bin = mcrypt_generic($td, $string); mcrypt_generic_deinit($td); mcrypt_module_close($td); $hmac = hash_hmac('sha1', $encrypted_data_bin, $key, $raw_output = true); $raw = $hmac.$iv.$encrypted_data_bin; $encrypted_string = str_replace( array('+','/','='), array('.','_','-'), base64_encode($raw) ); return strlen($key)==$key_length ? $encrypted_string : ''; } function decryptStringAES($encrypted_string, $key) { $raw = base64_decode( str_replace( array('.','_','-'), array('+','/','='), $encrypted_string ) ); $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); $key_length = mcrypt_enc_get_key_size($td); $key = substr($key, 0, $key_length ); $iv_size = mcrypt_enc_get_iv_size($td); $hmac_size = 20; //strlen(hash_hmac('sha1', ...)); $hmac = substr($raw, 0, $hmac_size); $iv = substr($raw, $hmac_size, $iv_size); $encrypted_data_bin = substr($raw, $hmac_size + $iv_size); $calcmac = hash_hmac('sha1', $encrypted_data_bin, $key, $raw_output = true); mcrypt_generic_init($td, $key, $iv); $decrypted = mdecrypt_generic($td, $encrypted_data_bin); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $calcmac==$hmac ? rtrim($decrypted, "\0") : ''; }
code snippets are licensed under Creative Commons CC-By-SA 3.0 (unless otherwise specified)