How can the code provided be optimized to ensure proper encryption and decryption of data?

The code provided lacks proper initialization vector (IV) generation and usage in the encryption and decryption process. To ensure proper encryption and decryption of data, it is important to generate a random IV for each encryption operation and include it in the ciphertext. This will prevent patterns in the encrypted data and enhance security.

<?php

function encryptData($data, $key) {
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);
    return base64_encode($iv . $encrypted);
}

function decryptData($data, $key) {
    $data = base64_decode($data);
    $ivLength = openssl_cipher_iv_length('aes-256-cbc');
    $iv = substr($data, 0, $ivLength);
    $encrypted = substr($data, $ivLength);
    return openssl_decrypt($encrypted, 'aes-256-cbc', $key, 0, $iv);
}

// Example usage
$key = 'your_secret_key';
$data = 'Hello, World!';
$encryptedData = encryptData($data, $key);
echo "Encrypted Data: $encryptedData\n";
$decryptedData = decryptData($encryptedData, $key);
echo "Decrypted Data: $decryptedData\n";

?>