Hey SD'ers,
Ik lees op diverse websites dat een md5 en sha1 hash tegenwoordig niet meer veilig is. Maar ik krijg geen uitleg gevonden waarom niet.
Kunnen 'hackers' in de database kijken? Als je een hash helemaal zou veranderen, dan is het wel veilig?
Groeten,
Bart Roelofs
- wachtwoord in database
-
07-10-2012, 14:39 #1
- Berichten
- 350
- Lid sinds
- 14 Jaar
wachtwoord in database
-
In de schijnwerper
AllesOverFreelancen.nl - DA11 - Uit 2006Domein te koop[SNELLE LEVERING] Laat je website / webshop snel en professioneel bouwen!Freelance / WerkLinkbuilding(internationaal)uitbesteden(ook whitelabel)?Wij regelen alle plaatsingen.Freelance / WerkAANGEBODEN: Artikel/Blog plaatsing Hoge DA DR en TrFl!SEO/Linkbuilding -
07-10-2012, 14:45 #2
- Berichten
- 400
- Lid sinds
- 15 Jaar
Re: wachtwoord in database
Wat de meest veilige manier is om voor je wachtwoord in je sha2 string een random string te zetten die ze alleen kunnen zien als je in de server kan komen, dus niet alleen bij de database.
PHP Code:$securePassword = hash('sha256', "RAND0mStrinNGak19aknsa" . $password);
-
07-10-2012, 14:48 #3
- Berichten
- 350
- Lid sinds
- 14 Jaar
Re: wachtwoord in database
Ik had zelf een improvisatie gemaakt. Maar weet niet of het veilig is:
Gebruiker geeft bij aanmelden wachtwoord op
wachtwoord wordt omgezet in sha1 hash
ik verwijder 5 characters (bijv. 1, 5, a, c en f)
Zet de record in de database
Gebruiker wil aanmelden
ik zet wachtwoord in een hash
verwijder weer de 5 characters
en vergelijk met de database
Geen idee of het werkt, en of het veilig is. Graag advies.
Groeten,
Bart
-
07-10-2012, 14:50 #4
- Berichten
- 400
- Lid sinds
- 15 Jaar
Re: wachtwoord in database
Kan inderdaad, maar dat is moeilijk doen, en niet 100% veilig. Mijn manier is simpel en veilig..
-
07-10-2012, 14:57 #5
- Berichten
- 350
- Lid sinds
- 14 Jaar
Re: wachtwoord in database
Even zodat ik het snap. Jij doet dus het volgende.
Gebruiker voert wachtwoord in
Jij plakt er gekke tekens achter
Je zet het om in een hash
Als gebruiker inlogt
Je plakt zelfde tekens achter wachtwoord
Je zet het om naar een hash
Correct?
Groeten,
Bart
Aanvullend bericht:
Ik ben eruit.
Bedankt,
Groeten,
BartLaatst aangepast door bart roelofs : 07-10-2012 om 21:10 Reden: Automatisch samengevoegd.
-
08-10-2012, 18:08 #6
- Berichten
- 400
- Lid sinds
- 15 Jaar
Re: wachtwoord in database
Helemaal correct Bart :)
-
08-10-2012, 19:23 #7
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
Re: wachtwoord in database
voor de cut&pasters:
private function makeHash($password) {
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
$hash = hash("sha256", $salt . $password);
return $salt . $hash;
}
private function validateHash($password, $dbHash) {
$salt = substr($dbHash, 0, 64);
$valid = substr($dbHash, 64, 64);
$test = hash("sha256", $salt . $password);
return $test === $valid;
}
Aanvullend bericht:
En indien je de gegevens wilt encrypten/decrypten:
private function encrypt($str) {
$block = mcrypt_get_block_size('des', 'ecb');
$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);
$ret = base64_encode(mcrypt_encrypt(MCRYPT_DES, "8keypass", $str, MCRYPT_MODE_ECB));
return $ret;
}
private function decrypt($str) {
$str = mcrypt_decrypt(MCRYPT_DES, "8keypass", base64_decode($str), MCRYPT_MODE_ECB);
$block = mcrypt_get_block_size('des', 'ecb');
$pad = ord($str[($len = strlen($str)) - 1]);
return substr($str, 0, strlen($str) - $pad);
}
Dat '8keypass' is een encryptie key van 8 tekens die je ergens erg veilig (buiten je document root) moest bewaren.Laatst aangepast door John Timmer : 08-10-2012 om 19:28 Reden: Automatisch samengevoegd.
-
08-10-2012, 19:28 #8
- Berichten
- 301
- Lid sinds
- 17 Jaar
Re: wachtwoord in database
Waarom eigenlijk niet meteen sha512 doen ipv 256?
-
08-10-2012, 19:30 #9
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
-
08-10-2012, 19:41 #10gast16278 Guest
Re: wachtwoord in database
PHP raadt je aan crypt() te gebruiken met het blowfish algoritme. Dit algoritme doet er relatief lang over om een hash te maken van je wachtwoord, waardoor het brute-forcen (te) lang duurt. Zeker wanneer je dit combineert met een sterke salt heb je een sterke beveiliging.
Het is zelfs aan te raden je salt te genereren aan de hand van de invoer van de gebruiker. Iedere gebruiker heeft op die manier een uniek wachtwoord + unieke salt. Door deze methode voorkom je dat je salt uitlekt en je beveiliging in elkaar stort. Immers, wanneer een salt bekend is dan hoeft men niet meer alles te bruteforcen, maar kan men "pre-salt"+randomkarakters+"end-salt" gaan bruteforcen.
Kort door de bocht: Wanner het wachtwoord van de gebruiker "a" is, en daar "b" als pre-salt en "c" als end-salt bij hoort, dan is het wachtwoord wat je gaat hashen "bac". Heeft geen gebruiker "g" als wachtwoord, dan zou "h" pre-salt zijn en "i" end-salt. Het wachtwoord wat je dan gaat hashen is "hgi". Je salt verandert, dus zul je de hele string moeten bruteforcen.
Wellicht verstandig om in het genereren van je salt ook het blowfish-algoritme te gebruiken (of een ander algoritme wat "lang" duurt). Mocht dan je algoritme uitlekken, dan zorg je er nog voor dat het zo resource-intensief is dat het brute-forcen lang, lang duurt.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic