encrypten / decrypten met keyword?
Ik vraag me af of php een functie heeft waarmee je kunt encrypten en decrypten aan de hand van een keyword.
Stel ik heb een string:
$string = 'Dit is een geheime tekst.'
Is het dan mogelijk om die string met een bepaald keyword te encoderen (en bijvoorbeeld op te slaan in de database). Bijvoorbeeld:
$keyword = 'holadiejee';
$geheime_string = encrypt($string, $key);
In de $geheime_string staat nu bijvoorbeeld 'asdas3qr434sdgsswwwsfsdfst4443w345dgQ#$#5dfgdgtt3453gdsg';
En als je dan dit doet:
$geheime_string_ontrafeld = decrypt($geheime_string, $keyword);
Dan krijg je de originle string weer terug.
Bestaat zoiets?
Nee, volgens mij is het dat niet. Wat ik zoek is iets waar je een keyword voor nodig hebt. Zowel voor het encoderen als het decoderen. Op die manier kun je dus data versleuteld in je database zetten en alleen met het juiste keyword kun je die data te zien krijgen.
Naar mijn weten bestaat zoiets niet. Maar dat kan je natuurlijk zelf wel bouwen. Je moet dan wel goed bedenken hoe je precies de letters / cijfers gaat positioneren en hoe je dat gaat onthouden.
Wat jij wilt is eigenlijk een soort eigen encryptie methode.
Stel bijvoorbeeld, je maakt voor iemand anders een website. Dan is het handig als jij zelf ook in het CMS kunt inloggen (ivm onderhoudswerkzaamheden). Nog handiger zou het dan zijn als je daar de wachtwoorden kunt zien van de FTP server. Maar je wilt natuurlijk wel dat die wachtwoorden geencrypt in de database staan. Maar om ze vervolgens te decrypten (en zichtbaar te maken) heb je dan een keyword nodig. Op basis van dat keyword wordt de informatie dan gedycrypt. Dus alleen als je het juiste keyword invoert krijg je de juiste informatie terug. Voer je een verkeerd keyword in, dan krijg je weliswaar informatie terug, maar niet de juiste :)
Snap je wat ik bedoel?
Gewijzigd op 09/07/2011 15:17:09 door Ozzie PHP
Wachtwoorden sla je op met md5 en/of sha en(/of) salt. Dan is er volgens mij geen weg terug meer. Of je moet zelf een manier van encrypten gaan maken, waarbij je ook weer kunt decrypten.
Ik heb 2 links gevonden met een soort vergelijkbaar script van wat ik zoek, maar het is nogal technisch dus ik weet niet of dit betrouwbare scripts zijn. Maar dit is wel het idee van wat ik dus zoek.
http://www.phpbuilder.com/board/showthread.php?t=10326721
en
http://tech.chitgoks.com/2008/03/24/php-encrypt-decrypt-using-base64/
Kan iemand mij vertellen of deze scripts betrouwbaar zijn? Of weet iemand nog een ander goed script?
Gewijzigd op 09/07/2011 19:11:51 door Ozzie PHP
http://www.php.net/manual/en/function.mcrypt-encrypt.php
http://www.php.net/manual/en/function.mcrypt-decrypt.php
Welke manier ik gebruik maakt me niet zoveel uit, zolang ik het maar op een eenvoudige wijze kan implementeren. Bij mcrypt moet je een mode en cipher opgeven. Ik heb geen idee wat daarmee bedoeld wordt.
Overigens vind ik het vreemd dat je iets kan encrypten en decrypten, maar dat in een database gegevens van gebruikers gewoon "onversleuteld" staan. Denk aan adresgegevens, e-mailadressen. Waarom worden die niet ge-encrypt opgeslagen?
Ozzie PHP op 09/07/2011 20:01:15:
@The Force: dat vind ik prima, maar wat is het verschil met die 2 andere scripts?
Met mcrypt kan je met alle bekende en zeer veilige encryptiemethoden gegevens encrypten. De eerste link die je geeft gebruikt geen geteste encryptiemethode maar verzint zijn eigen. Een goede encryptiemethode is niet iets wat je zo kan maken. Deze methode zal dus relatief gezien zeer onveilig zijn. Helemaal gezien het feit dat deze enkel wat tekens verschuifd en dat je met dezelfde functie zowel kan encrypten als decrypten. Bovendien kan je maar een beperkt wachtwoord gebruiken. De tweede is nog simpeler qua opzet maar gooit er nog een base_64 encode over heen. Zinloos natuurlijk want als je hem decode dan heb je je geheime string zonder noemenswaardige vorm van encryptie.
Je kan je natuurlijk afvragen of er iemand is die de tijd gaat nemen om je data te proberen te decrypten maar waarom zou je geen betrouwbare encryptie toepassen als dat mogelijk is? Dat is hetzelfde als dat je zelf je eigen hashfunctie gaat maken.
Ozzie PHP op 09/07/2011 20:01:15:
Welke manier ik gebruik maakt me niet zoveel uit, zolang ik het maar op een eenvoudige wijze kan implementeren. Bij mcrypt moet je een mode en cipher opgeven. Ik heb geen idee wat daarmee bedoeld wordt.
Als je dat echt belangrijk vindt dan kan dat inderdaad een reden zijn om een simpelere vorm van encryptie toe te passen. Het is een afweging die je voor jezelf moet maken. Maar ik zou zeggen: kijk naar de voorbeelden die de gebruikers geven voor het encrypten en decrypten, zo moeilijk is het nu ook weer niet.
Ozzie PHP op 09/07/2011 20:01:15:
Overigens vind ik het vreemd dat je iets kan encrypten en decrypten, maar dat in een database gegevens van gebruikers gewoon "onversleuteld" staan. Denk aan adresgegevens, e-mailadressen. Waarom worden die niet ge-encrypt opgeslagen?
Ben ik met je eens. Zal een combinatie zijn van luiheid, onwetendheid, het-gaat-negenennegentig-van-de-honderd-keer-goedheid en de mate van veiligheid die nodig is. Overigens kan de data geëncrypteerd zo'n twee keer zo groot zijn. Je moet dan in sommige gevallen dus het text datatype gebruiken in plaats van varchar.
je kan ook je keyword pakken, die zovaak achter elkaar plakken dat de repeat van het keyword evenlang is als de te-encoden tekst, en vervolgens op die 2 strings een XOR doen :)
Niek s op 09/07/2011 20:25:31:
je kan ook je keyword pakken, die zovaak achter elkaar plakken dat de repeat van het keyword evenlang is als de te-encoden tekst, en vervolgens op die 2 strings een XOR doen :)
Leef je nog in de tijd van Ceasar?
The Force op 09/07/2011 20:33:29:
Leef je nog in de tijd van Ceasar?
Yo bedankt voor je goed onderbouwde comment. Heeft iedereen wat aan! :)
The Force op 09/07/2011 20:53:14:
In die tijd werd zulke simpele 'encryptie' al toegepast. Zie bijv. http://en.wikipedia.org/wiki/Caesar_cipher .
+1
Maar goed, mijn vraag was of je dus kan encrypten en decrypten op basis van een key. Dat blijkt dus te kunnen. Nu kan ik me voorstellen dat ik bepaalde informatie in de database encrypt, bijvoorbeeld ftp gegevens van de server. Maar zou je dan eigenlijk ook alle userinformatie zoals adressen, e-mailadressen en dergelijke moeten encrypten? Zit hier bijvoorbeeld ook een bepaald nadeel aan? Bijvoorbeeld dat het decrypten veel tijd / serverbelasting kost? Of is het puur luiheid / laksheid dat programmeurs dit niet doen?
Gewijzigd op 09/07/2011 22:19:12 door Ozzie PHP
Ik zou zeggen, voer eens wat tests uit? ;-)
Ozzie PHP op 09/07/2011 22:17:27:
@The Force: dankjewel voor je uitgebreide toelichting. Welke cipher en mode zou jij toepassen?
Dat lijkt me een mooie huiswerkopdracht ;). Nee serieus, verdiep je eens in de verschillende vormen van encryptie. Daar steek je meer van op dan dat ik iets zou zeggen als "blowfish" o.i.d.
Ozzie PHP op 09/07/2011 22:17:27:
Die mcrypt kun je daar alle tekst en tekens mee encoderen? Dus ook ü en é en © enzovoorts?
Ja. Elke serieuze encryptie kan dat.
Ozzie PHP op 09/07/2011 22:17:27:
Wel komisch dat je dan inderdaad de velden een ander datatype moet geven. Daar had ik nog helemaal niet bij stilgestaan.
Alleen als de lengte de maximale lengte van 256 tekens die varchar aankan zou kunnen overschrijden. Bijkomend nadeel: wordt 1 teken niet opgeslagen (MySQL trimt automatisch als je meer dan 256 tekens invoert en genereert daarbij enkel een warning) dan kan je de gehele tekst niet meer decrypten.
Ozzie PHP op 09/07/2011 22:17:27:
Maar je zou het dus nog verder kunnen doortrekken (als je dat zou willen) en ook de tabelnamen encrypten? Zodat mocht ooit de database gehackt worden niemand er iets aan heeft? Dus in plaats van een tabel 'users' heb je dan een tabel 'erfsdsvg4$5werljkerwrew' (ik verzin maar wat). Of gaat dat allemaal tever?
Maar je zou het dus nog verder kunnen doortrekken (als je dat zou willen) en ook de tabelnamen encrypten? Zodat mocht ooit de database gehackt worden niemand er iets aan heeft? Dus in plaats van een tabel 'users' heb je dan een tabel 'erfsdsvg4$5werljkerwrew' (ik verzin maar wat). Of gaat dat allemaal tever?
Ja dat gaat te ver. Encrypt indien nodig gewoon de privacy gevoelige gegevens. Als je enkel de tabelnamen encrypt (niet de kolomnamen) dan kan je alsnog raden wat de tabelnaam is. Al je queries worden daarnaast minder leesbaar. Ga je dan ook nog de kolomnamen encrypten (want anders heeft tabelnamen encrypten geen zin) dan krijg je dus totaal onleesbare queries en een niet meer onderhoudbare database.
Ozzie PHP op 09/07/2011 22:17:27:
Maar goed, mijn vraag was of je dus kan encrypten en decrypten op basis van een key. Dat blijkt dus te kunnen. Nu kan ik me voorstellen dat ik bepaalde informatie in de database encrypt, bijvoorbeeld ftp gegevens van de server. Maar zou je dan eigenlijk ook alle userinformatie zoals adressen, e-mailadressen en dergelijke moeten encrypten? Zit hier bijvoorbeeld ook een bepaald nadeel aan? Bijvoorbeeld dat het decrypten veel tijd / serverbelasting kost? Of is het puur luiheid / laksheid dat programmeurs dit niet doen?
Zie mijn vorige reactie op die vraag.
Gewijzigd op 09/07/2011 23:07:07 door The Force
Oké, thanks voor jullie reacties!
The Force op 09/07/2011 20:53:14:
In die tijd werd zulke simpele 'encryptie' al toegepast. Zie bijv. http://en.wikipedia.org/wiki/Caesar_cipher .
Ja, en?
Het is geen 'perfecte' encryptie, maar daar is ook niet om gevraagd volgens mij? Het is een leuke manier om iets even snel te crypten.
Ook vind ik de reactie een beetje flauw. Er wordt gevraagd om welke encryptie methode er gebruikt zou kunnen worden, ik stel een lekker simpele oplossing voor. Daar komt commentaar op, maar zodra er dan aan je gevraagd wordt wat JIJ zou doen, is het ineens 'ja google maar'.
Gewijzigd op 10/07/2011 15:38:03 door niek s
Niek s op 10/07/2011 15:36:34:
Ja, en?
Het is geen 'perfecte' encryptie, maar daar is ook niet om gevraagd volgens mij? Het is een leuke manier om iets even snel te crypten.
Ook vind ik de reactie een beetje flauw. Er wordt gevraagd om welke encryptie methode er gebruikt zou kunnen worden, ik stel een lekker simpele oplossing voor. Daar komt commentaar op, maar zodra er dan aan je gevraagd wordt wat JIJ zou doen, is het ineens 'ja google maar'.
The Force op 09/07/2011 20:53:14:
In die tijd werd zulke simpele 'encryptie' al toegepast. Zie bijv. http://en.wikipedia.org/wiki/Caesar_cipher .
Ja, en?
Het is geen 'perfecte' encryptie, maar daar is ook niet om gevraagd volgens mij? Het is een leuke manier om iets even snel te crypten.
Ook vind ik de reactie een beetje flauw. Er wordt gevraagd om welke encryptie methode er gebruikt zou kunnen worden, ik stel een lekker simpele oplossing voor. Daar komt commentaar op, maar zodra er dan aan je gevraagd wordt wat JIJ zou doen, is het ineens 'ja google maar'.
Kalm aan Niek! Waarom zou je in hemelsnaam zelf een slechte, makkelijk te kraken 'encryptie' maken die letterlijk (!) voor het jaar 0 gebruikt werd? We hebben het hier over ftp wachtwoorden, e-mailadressen en persoonsgegevens. En ga niet tegen mij zeggen dat ik antwoord 'ja google maar', want volgens mij geef ik hier de meest uitgebreide uitleg overal bij. Wellicht snap je het niet, maar het is niet goed om alles voor te kauwen. Daarnaast is kennis van encryptiemethoden niet al te gek om te hebben. Moet ik dan een pagina's lange vergelijking gaan schrijven welke encryptiemethode in welk geval het beste toepasbaar is? Of moet ik (veel te kort door de bocht) tegen hem zeggen "ja kies die maar"? Je komt hier toch wat om te leren?
Gewijzigd op 10/07/2011 16:37:48 door The Force