How can the issue of the randomly generated $iv affecting decryption be resolved in PHP encryption?

Issue: The randomly generated $iv for encryption can affect decryption if it is not stored or transmitted along with the encrypted data. To resolve this, the $iv needs to be stored or transmitted along with the encrypted data for decryption.

// Encrypt data with randomly generated $iv
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);
}

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

// Example usage
$key = 'secretkey';
$data = 'Hello, World!';
$encryptedData = encryptData($data, $key);
echo decryptData($encryptedData, $key);