Hoi

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?

mcrypt_generic is verouderd.

Jan
Ik ga er eens goed naar kijken.
Bedankt
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;
}

Reageren