What best practices should be followed when implementing encryption and decryption functions in PHP for sensitive data?

When implementing encryption and decryption functions in PHP for sensitive data, it is important to use strong encryption algorithms such as AES and securely store encryption keys. Additionally, always use secure random number generators to create initialization vectors for encryption. It is also recommended to use authenticated encryption modes like AES-GCM to ensure data integrity.

// Encryption function
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);
}

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