2 richtings codering
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
openssl_encrypt en openssl_decrypt. Als je een beetje algo kiest zit het voor de rest wel snor.
Bedankt
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):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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;
}
[/code]
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;
}
[/code]