Dit artikel legt uit hoe je contactvelden kunt versleutelen of hashen met behulp van Twig. Je kunt dit gebruiken om links met persoonlijke gegevens op een veilige manier aan een e-mail toe te voegen. Bijvoorbeeld om je klanten een gepersonaliseerde enquête te sturen.
Versleuteling
De Twig-filter encrypt accepteert twee parameters.
- De eerste parameter is verplicht. Dit is de base64-gecodeerde sleutel die gebruikt zal worden voor de versleuteling. De sleutel moet op een cryptografisch veilige manier worden gegenereerd, bijvoorbeeld met openssl_random_pseudo_bytes.
- De tweede parameter is optioneel. Dit is de versleutelmethode die gebruikt zal worden. De standaardwaarde is "aes-256-cbc". Deze parameter wordt gecontroleerd tegen de lijst van versleutelingen die de OpenSSL-bibliotheek op de webservers biedt. Dit kan veranderen in toekomstige PHP-versies.
Het antwoord van de functie is een base64-gecodeerde string die als volgt is opgebouwd:
iv: de willekeurig gegenereerde initialisatievector met de lengte die nodig is voor de versleutelmethode -
tag: alleen gebruikt bij sommige versleutelingen, met een lengte van 16 - versleutelde gegevens.
Zie de onderstaande Twig code voor voorbeelden van versleuteling met één parameter of met twee parameters.
{{ contact.email|encrypt('base64_encoded_key')|url_encode }}
{{ contact.email|encrypt('base64_encoded_key', 'aes-256-cbc')|url_encode }}
Decryptie
Over het algemeen moet je het volgende doen om het contactveld te decoderen:
Decodeer de base64-gecodeerde versleutelde invoer. Dit resulteert in een samengevoegde string met de IV, optionele tag en versleutelde gegevens. De lengte van de IV is afhankelijk van de gebruikte versleutelmethode. Voor AES is dit 16 bytes. Als de versleutelmethode een tag genereert tijdens de versleuteling, is die tag de volgende 16 bytes van de base64-gedecodeerde string. De rest van de base64-gedecodeerde string zijn de versleutelde gegevens. Met de IV, de optionele tag en de sleutel decodeer je de versleutelde gegevens.
Onderstaand is een PHP-codevoorbeeld om de gegevens te decrypteren. Standaard gebruiken we de AES-256-CBC versleutelmethode.
$base64Decoded = base64_decode($encrypted);
$ivLength = openssl_cipher_iv_length($cipher);
$iv = substr($base64Decoded, 0, $ivLength);
if (preg_match('/-(ccm|gcm|ocb)/', $cipher)) {
$tag = substr($base64Decoded, $ivLength, 16);
$encryptedData = substr($base64Decoded, $ivLength + 16);
} else {
$tag = null;
$encryptedData = substr($base64Decoded, $ivLength);
}
$decrypted = openssl_decrypt($encryptedData, $cipher, base64_decode($key), OPENSSL_RAW_DATA, $iv, $tag);
Hashing
Bekijk de ondersteunde hashing-algoritmen hier: https://www.php.net/manual/en/function.hash-algos.php.
Zie de onderstaande Twig code voor een voorbeeld.
{{ variable|hash("algorithm") }}
Voorbeeld:
{% set string = "string" %}
{{ string|hash("sha256") }}
Toont: 473287f8298dba7163a897908958f7c0eae733e25d2e027992ea2edc9bed2fa8