How can PHP developers securely encrypt and store sensitive user data, such as email addresses, in databases?

To securely encrypt and store sensitive user data like email addresses in databases, PHP developers can use a combination of encryption algorithms like AES (Advanced Encryption Standard) and secure hashing functions like bcrypt. By encrypting the data before storing it in the database and using a secure hashing function to store the encryption key, developers can ensure that the data is protected even if the database is compromised.

// Encrypt the sensitive data (email address) using AES encryption
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 the encrypted data
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);
}

// Store the encrypted data in the database
$email = 'user@example.com';
$key = 'supersecretkey';
$encryptedEmail = encryptData($email, $key);

// Retrieve and decrypt the data when needed
$decryptedEmail = decryptData($encryptedEmail, $key);
echo $decryptedEmail;