base64_encode en base64_decode
Het lijkt te werken. Maar het decoden gaat niet helemaal lekker
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$vbString = '[email protected]';
mysql_query('UPDATE users SET email = "' . base64_encode($vbString) . '"' WHERE id = 1);
$outputMail = mysql_query('SELECT email FROM users WHERE id = 1');
$res = mysql_fetch_object($outputMail);
echo base64_decode($res->email);
?>
$vbString = '[email protected]';
mysql_query('UPDATE users SET email = "' . base64_encode($vbString) . '"' WHERE id = 1);
$outputMail = mysql_query('SELECT email FROM users WHERE id = 1');
$res = mysql_fetch_object($outputMail);
echo base64_decode($res->email);
?>
Dan krijg ik het volgende op het scherm:
pietjanhotmailco
Ook met andere gegevens als volledige naam, etc lijkt het de spaties te vergeten en af en toe het laatse karakter niet goed te decoden.
Doe ik het direct, dan werkt het wel maar als ik het opsla in mn database niet meer:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$vbString = '[email protected]';
$encoded = base64_encode($vbString);
echo 'Encoded: ' . $encoded . '<br>';
echo 'Decoded: ' . base64_decode($encoded);
?>
$vbString = '[email protected]';
$encoded = base64_encode($vbString);
echo 'Encoded: ' . $encoded . '<br>';
echo 'Decoded: ' . base64_decode($encoded);
?>
Iemand enig idee?
Gewijzigd op 04/02/2013 15:14:32 door Dennis WhoCares
Waarom gebruik je base64_de/encode? Je geeft zelf al aan dat dit te decoderen is, en dus niet veilig is als encoding.
Beste Aar, ik wil het ook weer kunnen decoden voor de output op de pagina zelf. Dus het gaat erom dat het omkeerbaar is, maar toch niet zomaar te lezen vanuit database.
Als je het goed wilt doen, moet je het anders encrypten waarbij je met een sleutel deze weer terug kan halen.
Maar in ieder geval, met het encoded gaat het fout het encode niet correct of volledig
AES_ENCRYPT() en AES_DECRYPT() van MySQL gebruiken. Die zijn veilig, zolang je de string met de sleutel maar niet opslaat in de database (en daarvoor dus ook geen ander in de database terug te vinden gegeven gebruikt).
Je kunt de functies Is het veilig om een combinatie van gegevens als sleutel te gebruiken ? Bijv (userid . '-' . username)
Je komt er toch niet zomaar achter welke sleutel gebruikt is ?
Ik wil dat iedere gebruiker dus een eigen persoonlijke sleutel heeft
Gewijzigd op 04/02/2013 16:33:59 door Dennis WhoCares
Je moet het eigenlijk omkeren. Stel dat iemand wéét wat een bepaald e-mailadres is dat je in de database hebt opgeslagen, zelfs al is dat versleuteld. Dan nog moet de encryptie zó sterk zijn dat de sleutel niet is af te leiden uit bekend e-mailadres + onleesbaar e-mailadres.
en als die key nog eens sha1(md5()) gecodeerd wordt
Dennis WhoCares op 04/02/2013 17:00:54:
en als die key nog eens sha1(md5()) gecodeerd wordt
SHA-1 en MD5 gebruiken asymmetrische encryptie: uit de hash kun je nooit meer het oorspronkelijke gegeven halen. Je zocht naar symmetrische encryptie, omdat je uit de versleutelde data weer het oorspronkelijke, onversleutelde e-mailadres wilt kunnen halen.
de uitkomst van sha1(md5($input)) is toch altijd het zelfde? Alleen bestaat altijd uit 40 karakters
Dennis WhoCares op 04/02/2013 17:32:39:
Ehm, wat wort er precies bedoeld met asymmetrische encryptie ?
de uitkomst van sha1(md5($input)) is toch altijd het zelfde? Alleen bestaat altijd uit 40 karakters
de uitkomst van sha1(md5($input)) is toch altijd het zelfde? Alleen bestaat altijd uit 40 karakters
Uit $data = sha1($emailadres) kun je nooit meer afleiden welk $emailadres er versleuteld is opgeslagen in $data: asymmetrische encryptie is eenrichtingsverkeer.
Wat jij zoekt, is tweerichtingsverkeer en symmetrische encryptie: een versleuteld gegeven moet weer kunnen worden ontsleuteld.
Dennis WhoCares op 04/02/2013 18:21:45:
Aha, dat is al beter, zolang $_SESSION['userid'] en $userR->user_username maar niet openbaar zijn. Voor $_SESSION['userid'] kun je bijvoorbeeld een willekeurige BIGINT in MySQL gebruiken; dat is beter dan user-ID's voorspelbaar tellen: 1, 2, 3, enzovoort.Omdat MD5 een veel kleinere bitdiepte heeft dan SHA-1, heeft sha1(md5(...)) geen zin. Je benut de kracht van SHA-1 niet, maar zit vast aan kleinere hash van MD5. Het lijkt misschien onlogisch, maar de kortere vorm is veiliger:
$key = sha1($_SESSION['userid'] . '-' . $userR->user_username);
Dylan PHP op 04/02/2013 19:30:14:
Kijk anders eens naar bcrypt
http://www.phphulp.nl/php/script/beveiliging/hash-bcrypt-class-encryption/1954/
http://www.phphulp.nl/php/script/beveiliging/hash-bcrypt-class-encryption/1954/
Ik zal deze functie zeker gaan gebruiken volgende keren met m'n wachtwoorden opslaan, ipv sha1()
Ward van der Put op 04/02/2013 18:32:17:
Omdat MD5 een veel kleinere bitdiepte heeft dan SHA-1, heeft sha1(md5(...)) geen zin. Je benut de kracht van SHA-1 niet, maar zit vast aan kleinere hash van MD5. Het lijkt misschien onlogisch, maar de kortere vorm is veiliger:
$key = sha1($_SESSION['userid'] . '-' . $userR->user_username);
$key = sha1($_SESSION['userid'] . '-' . $userR->user_username);
Ahh ik begrijp wat je bedoeld, dus zonder de md5 ertussen is eigenlijk nog beter.
Ik houdt dit in mijn achterhoofd, dankjewel :)
Nou nog het allerlaatste betreft deze topic.
Het is natuurlijk niet veilig om de key in een sessie op te slaan, dus zal ik de key op elke pagina opnieuw laten opvragen? (in dit voorbeeld userid-username)
Gewijzigd op 04/02/2013 21:47:03 door Dennis WhoCares