encryptie uit dB decrypten
Ik ga binnenkort/einde jaar beginnen met het maken van een customized leden
beheer- en aanmeld systeem.
Dat houdt in dat nieuwe leden zich zullen aanmelden en gegevens als bankrekening en emailadres moeten ingeven.
Nu begrijp ik dat wanneer je inlogt je gebruik kan gaan maken van encrypten en vergelijken.
Ofwel, dat pas ik dan toe op data die van geencrypt invoerveld met database wordt vergeleken.
Zeg maar: dat is toe te passen van gebruiker naar database (soort van).
Maar andersom, als je eenmaal bent ingelogd, wil ik ook dat emailadres en bankrekening zichtbaar worden
voor de gebruiker.
Echter, die twee gegevens (email/bankrek.) wil ik geencrypt in de database hebben.
Hoe pak ik het nou zo aan dat dit geencrypt opslaan weer gedecrypt kan worden en correct
weergegeven voor de gebruiker?
Het lijkt me dat ik toch niet de eerste ben die hier een oplossing voor zoekt...
Mogelijk is het heel simpel, maar ik kan het even niet bedenken.
Uiteraard zal een oplossing niet het direct decrypten zijn zo lijkt me anders heeft het nog niet zoveel zin als een hacker ooit bij de gegevens zou komen van de dB.
Maar hoe dan wel?
Wie weet raad? Of hoe gaat dit in zn algemeenheid bij grote(re) bedrijven?
Alvast dank voor feedback.
gr Eric
Gewijzigd op 26/10/2013 17:18:25 door Eric T
Eric T op 26/10/2013 17:17:33:
Maar andersom, als je eenmaal bent ingelogd, wil ik ook dat emailadres en bankrekening zichtbaar worden voor de gebruiker. Echter, die twee gegevens (email/bankrek.) wil ik ge-encrypt in de database hebben.
Waarom wil je een bankrekeningnummer opslaan in je database? En waarom moeten gebruikers hun eigen bankrekeningnummer zien; kennen ze dat zelf niet?
Wat je niet opslaat, kan nooit gestolen worden. Dat is de eerste beslissingsregel.
Ik zou alleen het password coderen. De rest niet. Dat password gebruik je alleen als een gebruiker wil inloggen. Het password die de gebruiker invult en submit ga je dan ook coderen. Daarna vergelijk je de hash uit de database met de hash van het zojuist ingevulde password van het login formulier zoals je het zou vergelijken met ongecodeerde passwords
Bijv. "Mijnencrypt" . userid . "BlaBla"
Zal later mn functies er eens bijpakken als ik mn laptop heb
Ward van der Put op 26/10/2013 17:27:07:
Wat je niet opslaat, kan nooit gestolen worden. Dat is de eerste beslissingsregel.
Ward, volledig met je eens, maar er zit natuurlijk meer achter...
Het is wel handig als de penningmeester weet wat het bankrekeningnr is :-)
Helaas moet dit dus ergens bekend zijn/worden, daar ontkom ik m.i. niet aan...
Toevoeging op 26/10/2013 17:32:10:
Frank Nietbelangrijk op 26/10/2013 17:27:23:
Ik zou alleen het password coderen. De rest niet. Dat password gebruik je alleen als een gebruiker wil inloggen. Het password die de gebruiker invult en submit ga je dan ook coderen. Daarna vergelijk je de hash uit de database met de hash van het zojuist ingevulde password van het login formulier zoals je het zou vergelijken met ongecodeerde passwords
Briljant!
Dat is het idd
Dankjewel Frank!
Toevoeging op 26/10/2013 17:33:06:
Dennis WhoCares op 26/10/2013 17:27:31:
Zal later mn functies er eens bijpakken als ik mn laptop heb
Dat mag natuurlijk altijd :-)
Dankje Dennis alvast!
Eric T op 26/10/2013 17:31:07:
Ward, volledig met je eens, maar er zit natuurlijk meer achter...
Het is wel handig als de penningmeester weet wat het bankrekeningnr is :-)
Helaas moet dit dus ergens bekend zijn/worden, daar ontkom ik m.i. niet aan...
Ward van der Put op 26/10/2013 17:27:07:
Wat je niet opslaat, kan nooit gestolen worden. Dat is de eerste beslissingsregel.
Ward, volledig met je eens, maar er zit natuurlijk meer achter...
Het is wel handig als de penningmeester weet wat het bankrekeningnr is :-)
Helaas moet dit dus ergens bekend zijn/worden, daar ontkom ik m.i. niet aan...
Het is ook erg handig als ik jouw creditcard gegevens zou hebben, maar ik neem aan dat jij daar de noodzaak niet van inziet. Dus, 'handig' is geen goede onderbouwing voor het opslaan van persoonsgegevens. Is het nodig?
Erwin H op 26/10/2013 17:53:50:
Het is ook erg handig als ik jouw creditcard gegevens zou hebben, maar ik neem aan dat jij daar de noodzaak niet van inziet. Dus, 'handig' is geen goede onderbouwing voor het opslaan van persoonsgegevens. Is het nodig?
Erwin, excuses voor mijn te vriendelijk en daarmee onduidelijk taalgebruik.
Ik zal het daarom wat zwart witter opschrijven: ja het is nodig.
Het hangt er ook van af hoe "handig" de penningmeester is. Voor het verwerken van betalingen is een deels geanonimiseerd bankrekeningnummer zoals IBAN NL66 INGB **** **** 17 in combinatie met een naam van een rekeninghouder al voldoende.
Omdat mijn eigen database behoorlijk 'gevoelige' informatie bevat, encrypt en decrypt ik alle gegevens van de gebruikers.
Daarbij komt, elke gebruiker heeft zijn eigen 'code' om de gegevens te coderen. Dat doe ik als volgt waarbij ik mn usersessie ook gebruik, uiteraard heb ik voor ik deze functie uitvoer al gecontrolleerd of de gebruiker wel is ingelogd.. (Alleen ingelogde gebruikers hebben deze gegevens nodig)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function encrypt($string) {
//Gebruikersgegevens ophalen
//De unieke key aanmaken voor het encrypten(is ook nog eens sha1() gecodeerd)
$key = sha1('BlahMijn' . $row['user_id'] . 'uniekeEncryption' . $row['user_username'] . 'Key');
$encrypted = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$encrypted.=$char;
}
return base64_encode($encrypted);
}
function decrypt($string) {
$string = base64_decode($string);
//Gebruikersgegevens ophalen
//De unieke key aanmaken voor het decrypten
$key = sha1('BlahMijn' . $row['user_id'] . 'uniekeEncryption' . $row['user_username'] . 'Key');
$decrypted = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)-ord($keychar));
$decrypted.=$char;
}
return $decrypted;
}
//Gebruikersgegevens ophalen
//De unieke key aanmaken voor het encrypten(is ook nog eens sha1() gecodeerd)
$key = sha1('BlahMijn' . $row['user_id'] . 'uniekeEncryption' . $row['user_username'] . 'Key');
$encrypted = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$encrypted.=$char;
}
return base64_encode($encrypted);
}
function decrypt($string) {
$string = base64_decode($string);
//Gebruikersgegevens ophalen
//De unieke key aanmaken voor het decrypten
$key = sha1('BlahMijn' . $row['user_id'] . 'uniekeEncryption' . $row['user_username'] . 'Key');
$decrypted = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)-ord($keychar));
$decrypted.=$char;
}
return $decrypted;
}
Zoals je ziet is voor elke gebruiker de key waarmee encrypt en decrypt wordt anders.
(mijn gebruikersnamen kunnen mn 'bezoekers' niet veranderen, dus ik ook een vaste waarde)
Gewijzigd op 26/10/2013 19:31:00 door Dennis WhoCares
Dennis WhoCares op 26/10/2013 19:29:34:
Ik gebruik gewoon base64_encode en base64.....
....dus ik ook een vaste waarde)
....dus ik ook een vaste waarde)
Dennis, hartstikke bedankt! Helemaal blij hier :-)