Ik ben op zoek naar een 2 richtingscodering.
Zoiets zoals base64 waar SmFu = Jan maar liefst iets met een sleutel. zodat ik (of mijn site) het origineel kan terug halen. Bestaat er zoiets of moet ik dit zelf maken?
Ik vond het begin van openssl weinig toegankelijk, omdat OpenSSL een suite is van verschillende functies. Je moet dan eerst bedenken of je wilt versleutelen op basis van een gedeeld wachtwoord, of op basis van een cryptografische sleutel.
Als je wilt bijvoorbeeld wilt sleutelen met AES en een wachtwoord als sleutel (let op: status uit te faseren volgens ncsc.nl) moet je weten dat je eerst een sleutelpaar moet genereren met OpenSSL, dat het bericht versleutelt moet worden met de publieke sleutel waarna het alleen te ontsleutelen is met de private sleutel. Voorbeeldfunctie in PHP voor AES-256-CFB met padding (versleuteld bericht bestaat uit blokjes van 16 bytes):
<?php
function ontsleutel(string $sleutel, string $binair) : string {
$bericht = hex2bin($binair);
$hash = hash('sha256', $sleutel , TRUE);
$hmac = substr($bericht, 0, 32); // aannemende dat je dat hier hebt opgeslagen
$iv = substr($bericht, 32, 16); // idem
$versleuteld = substr($sBericht, 48);
if ('' === $versleuteld) {return '';} // leeg bericht
if (!hash_equals(hash_hmac('sha256', $versleuteld . $iv, $hash, TRUE), $hmac)) {
die('Verkeerde sleutel of bericht is corrupt');
}
$tekst = openssl_decrypt($versleuteld, 'aes-256-cfb', $hash, OPENSSL_RAW_DATA, $iv);
if (FALSE === $tekst) {
die('Bericht kan niet worden ontsleuteld');
}
$padding = ord(substr($tekst, -1));
if ($padding > 0 && $padding <= 15) {
return substr($tekst, 0, strlen($tekst) - $padding);
}
return $tekst;
}