base64_encode en base64_decode

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis WhoCares

Dennis WhoCares

04/02/2013 15:13:14
Quote Anchor link
Dag allen, ik probeer mijn gegevens gecodeerd in mn database op te slaan. Zodat mocht er n onbevoegd persoon toegang krijgen tot het database, niet zo 1-2-3 de gegevens kan lezen. Vandaar heb ik gekozen voor base64_decode.
Het lijkt te werken. Maar het decoden gaat niet helemaal lekker

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$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
 
PHP hulp

PHP hulp

26/04/2024 11:55:15
 
- Ariën  -
Beheerder

- Ariën -

04/02/2013 15:34:11
Quote Anchor link
Waarom gebruik je base64_de/encode? Je geeft zelf al aan dat dit te decoderen is, en dus niet veilig is als encoding.
 
Dennis WhoCares

Dennis WhoCares

04/02/2013 16:00:14
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

04/02/2013 16:12:31
Quote Anchor link
Klinkt zinloos, want een gemiddeld persoon kan zo weer zien dat het base65-encoded is, en kan het terug halen.
Als je het goed wilt doen, moet je het anders encrypten waarbij je met een sleutel deze weer terug kan halen.
 
Dennis WhoCares

Dennis WhoCares

04/02/2013 16:16:40
Quote Anchor link
ik wou ook gzinflate(str_rot13(base64_decode())) gebruiken, niemand weet toch zomaar welke methode je gebruikt?
Maar in ieder geval, met het encoded gaat het fout het encode niet correct of volledig
 
Ward van der Put
Moderator

Ward van der Put

04/02/2013 16:30:41
Quote Anchor link
Je kunt de functies 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).
 
Dennis WhoCares

Dennis WhoCares

04/02/2013 16:33:00
Quote Anchor link
@ward ik heb een functie gevonden dat dus een sleutel gebruikt.
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
 
Ward van der Put
Moderator

Ward van der Put

04/02/2013 16:45:22
Quote Anchor link
De sleutel moet één geheim onderdeel bevatten. Als je kolom A onleesbaar maakt met leesbaar gegevens uit kolom B + kolom C, kan iemand toch gaan zitten 'reverse engineeren'. Zelfs een moderne laptop kan honderdduizenden mogelijke combinaties uitproberen.

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.
 
Dennis WhoCares

Dennis WhoCares

04/02/2013 17:00:54
Quote Anchor link
en als die key nog eens sha1(md5()) gecodeerd wordt
 
Ward van der Put
Moderator

Ward van der Put

04/02/2013 17:06:44
Quote Anchor link
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.
 
Dennis WhoCares

Dennis WhoCares

04/02/2013 17:32:39
Quote Anchor link
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
 
Ward van der Put
Moderator

Ward van der Put

04/02/2013 17:51:33
Quote Anchor link
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

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

Dennis WhoCares

04/02/2013 18:21:45
Quote Anchor link
nee klopt, maar ik bedoel het als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$key = sha1(md5($_SESSION['userid'] . '-' . $userR->user_username));

update users SET email = "' . encryptFunc($_POST['email'],$key) . '"
 
Ward van der Put
Moderator

Ward van der Put

04/02/2013 18:32:17
Quote Anchor link
Dennis WhoCares op 04/02/2013 18:21:45:
nee klopt, maar ik bedoel het als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$key = sha1(md5($_SESSION['userid'] . '-' . $userR->user_username));

update users SET email = "' . encryptFunc($_POST['email'],$key) . '"
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

Dylan PHP

04/02/2013 19:30:14
 
Dennis WhoCares

Dennis WhoCares

04/02/2013 21:36:08
Quote Anchor link
Dylan PHP op 04/02/2013 19:30:14:

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);

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.