key; } /** * @param string $data The data to be encrypted, this can only encrypt strings. * @param string $key The key to use to encrypt the data, this key should be generated using the openssl_random_pseudo_bytes * @param string $cipherMethod The cypher method to use in the encryption process, these can be checked using * @param bool $integrity_check Check if the encrypted data can also be decypted, this will take 2x more time to process the data, but will make 100% sure that the data is safe and can be decrypted. */ function encryptData(string $data, string $key, string $cipherMethod = 'AES-256-CBC', bool $integrity_check = TRUE) { // Grab the key from self-reference $key = $this->key; // Lowercase the cipher $cipherMethod = strtolower($cipherMethod); // Check if the encryption method is valid if (!in_array($cipherMethod, openssl_get_cipher_methods())) { // Cypher was not in the available ciphers list. return FALSE; } // To encrypt a string $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipherMethod)); // Encrypt the data $encryptedData = openssl_encrypt($data, $cipherMethod, $key, OPENSSL_RAW_DATA, $iv); // Append the iv to the encrypted data $encryptedData = $iv . $encryptedData; // base64 encrypt to make sure we don't lose bytes $encryptedData = base64_encode($encryptedData); // Check if we should verify the integrity of the encryption if ($integrity_check === TRUE) { // Test for decryption validity if (md5($this->decryptData($encryptedData, $key, $cipherMethod)) === md5($data)) { // Put the output in the result return $encryptedData; } else { // Assign the output to the result return FALSE; } } else { // Simply return the results return $encryptedData; } } /** * @param string $data The data to be encrypted, this can only encrypt strings. * @param string $key The key to use to encrypt the data, this key should be generated using the openssl_random_pseudo_bytes * @param string $cipherMethod The cypher method to use in the encryption process, these can be checked using */ function decryptData(string $data, string $cipherMethod = 'AES-256-CBC') { // Grab the key from self-reference $key = $this->key; // Lowercase the cipher $cipherMethod = strtolower($cipherMethod); // Check if the encryption method is valid if (!in_array($cipherMethod, openssl_get_cipher_methods())) { // Cypher was not in the available ciphers list. return FALSE; } // base64 decode the data. $data = base64_decode($data); // Get the length of the IV $iv_length = openssl_cipher_iv_length($cipherMethod); // Get the IV from the decoded data $iv = substr($data, 0, $iv_length); // Get the encrypted string from the data $data = substr($data, $iv_length); // Decrypt the data $data = openssl_decrypt($data, $cipherMethod, $key, OPENSSL_RAW_DATA, $iv); // Return the data return $data; } }