encrypt decrypt onwetendheidje
Zo dat is er dan maar meteen uit... :-)
Desondanks ben ik er volop mee bezig en ik dacht dat alles werkte.
Maar iets gaat niet goed, en ik probeer te begrijpen waarom niet/en hoe dan wél.
Ik heb deze twee functies:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function mc_encrypt($encrypt, $key){
$encrypt = serialize($encrypt);
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
$passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $encrypt, MCRYPT_MODE_CBC, $iv);
$encoded = base64_encode($passcrypt).'|'.base64_encode($iv);
return $encoded;
}
// Decrypt Function
function mc_decrypt($decrypt, $key){
$decrypt = explode('|', $decrypt);
$decoded = base64_decode($decrypt[0]);
$iv = base64_decode($decrypt[1]);
$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $decoded, MCRYPT_MODE_CBC, $iv));
$decrypted = unserialize($decrypted);
return $decrypted;
}
?>
function mc_encrypt($encrypt, $key){
$encrypt = serialize($encrypt);
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
$passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $encrypt, MCRYPT_MODE_CBC, $iv);
$encoded = base64_encode($passcrypt).'|'.base64_encode($iv);
return $encoded;
}
// Decrypt Function
function mc_decrypt($decrypt, $key){
$decrypt = explode('|', $decrypt);
$decoded = base64_decode($decrypt[0]);
$iv = base64_decode($decrypt[1]);
$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $decoded, MCRYPT_MODE_CBC, $iv));
$decrypted = unserialize($decrypted);
return $decrypted;
}
?>
En geef verder nog in voordat ik ze aanroep:
En de aanroep zelf:
Het geëncrypte resultaat van een mc_encrypt() zet ik vervolgens in de database.
Als ik nu binnen dezelfde pagina weer decrypt, krijg ik keurig netjes het email adres te zien.
Echter...
Als ik de pagina herlaad waarbij ik decrypt met de geëncrypte regel uit de database (ik wil uiteindelijk dat op een willekeurig tijdstip het emailadres kunnen decrypten) krijg ik geen resultaat meer terug.
De encryptie is dan natuurlijk ook anders omdat het kennelijk random gaat, zo haal ik uit de encryptie functie. Dus lijkt het me logisch dat mc_decrypt zich anders gedraagt als je em op een later tijdstip opnieuw aanroept.
Maar hoe los ik het dan op dat ongeacht het moment van willen decrypten, ik met de sleutel
te allen tijde het juiste email adres naar voren kan toveren?
Ik hoef geen hele code hoor... maar een zetje in de goede richting of een linkje is al welkom.
In kan zelf tot op heden alleen maar mcrypt-encrypt/mcrypt-decrypt vinden :-(
Alvast 1000x dank uiteraard voor welke hulp ook.
gr Eric
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Alvast bedankt!
Alvast bedankt!
Gewijzigd op 10/04/2014 22:57:42 door - Ariën -
http://docs.php.net/manual/en/function.crypt.php
Dus wanneer je bijvoorbeeld wilt inloggen met een gecrypte wachtwoord moet je de hash die je op dat moment krijgt vergelijken met een hash die je in de database al hebt opgeslagen. Komen ze overheen. dan log je in zo niet gooi een foutmelding terug.
Maar wat ik wil is eigenlijk andere data als dus straatnaam, email adres, telefoonnummer encrypted in de database hebben.
Als een gebruiker dan ooit bijv. zijn email adres wil aanpassen, moet ie dan wel weer uitgelezen kunnen worden... het gaat em dus juist om die velden, en niet het wachtwoord.
Gewijzigd op 10/04/2014 23:15:22 door Eric T
Gewijzigd op 10/04/2014 23:51:39 door - Raoul -
(ter info, de sleutel zal nooit in de code staan)
Toevoeging op 11/04/2014 01:03:38:
Gevonden:
http://www.phpdevtips.com/2011/08/data-encryption-using-aes_encrypt/
(wel even type veld aanpassen van varchar naar blob)
Gewijzigd op 11/04/2014 01:03:22 door Eric T
- Raoul - op 10/04/2014 23:51:26:
Als je iets encrypt terwijl je dat heel gemakkelijk (door bijvoorbeeld in de code te kijken) kunt decrypten is het niet nodig dat je encrypt in de eerste plaats.
Het kan toch zijn dat iemand database gegevens in handen krijgt, maar niet de code?
M.b.v. een passphrase/sleutel worden gegevens ge-encrypt opgeslagen.
Die sleutel is zowel niet in de database als in de code bekend. Maar wel bij de gebruiker en de admin.
Best handig eigenlijk, en veilig ook (al is dat maar betrekkelijk tegenwoordig).
Overigens werkte het eerste stuk met mcrypt stiekem toch wel!
Ik bleek een ongelofelijke stomme fout te hebben gemaakt door de definiering van de encryption_key niet vóór maar na de functie aanroep te hebben gezet. Tsja, en dan encrypt ie op een lege sleutel.
Niet zo slim dus :-(
Hafijn, kan ik nu twee methoden kiezen :-)
Gewijzigd op 11/04/2014 01:35:34 door Eric T