A simple way to encrypt/decrypt data in php
In this post, we will focus on how can we encrypt/decrypt store (text/JSON) using PHP. This may be useful in cases where we need to store and retrieve sensitive data in filesystem instead of a database. We will be seeing only the encryption and decryption portion. The generated content can be saved in file using file_put_contents() and read using file_get_contents().
We will be using OpenSSL Functions functions available in PHP. In this example, we will use ‘AES-256-CBC-HMAC-SHA256’ cipher method. You can get a list of available cipher methods using openssl_get_cipher_methods().
Next, we need to generate Initialization Vector (IV) that will be used on openssl_encrypt(). Although we can proceed without initialization vector, it is generally not recommended.
1 2 3 4 | //get the length of IV for the selected cipher method $ivlength = openssl_cipher_iv_length( 'AES-256-CBC-HMAC-SHA256' ); //Generate a pseudo random string of required length. $iv = openssl_random_pseudo_bytes( $ivlength ); |
Encrypting
1 2 3 4 | $encryptedString = base64_encode (openssl_encrypt( $string , 'AES-256-CBC-HMAC-SHA256' , $key , OPENSSL_RAW_DATA, $iv )); // $string = string to be encoded // $key = the encryption key defined above. // $iv = Initialization Vector generated above. |
NOTE: The value of $key and $iv must be same in while encrypting and decrypting.
Decrypting
1 | $decrypted = openssl_decrypt( base64_decode ( $data ), 'AES-256-CBC-HMAC-SHA256' , $key , OPENSSL_RAW_DATA, $iv ); |