How can the complexity of encryption and decryption processes using mcrypt be simplified without compromising security?

To simplify the complexity of encryption and decryption processes using mcrypt without compromising security, we can create wrapper functions that handle the encryption and decryption logic. This way, the main code only needs to call these functions, abstracting away the details of the mcrypt functions.

function encryptData($data, $key) {
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM);
    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
    return base64_encode($iv . $encrypted);
}

function decryptData($data, $key) {
    $data = base64_decode($data);
    $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $iv = substr($data, 0, $ivSize);
    $data = substr($data, $ivSize);
    return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv), "\0");
}

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