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.

 


  //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



  $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



$decrypted = openssl_decrypt(base64_decode($data), 'AES-256-CBC-HMAC-SHA256', $key, OPENSSL_RAW_DATA, $iv);