Salt & Pepper
ik gebruikte vroeger altijd md5 en niets anders.
Naar aanrading heb ik het volgende:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$invoer = sha1(mysql_real_escape_string($_POST['wachtwoord']));
$salt = "GjtehGRJ527sTG";
$pepper = "84JKDJGdjaHHda8";
$uitvoer = md5($pepper.$invoer.$salt);
echo $uitvoer;
?>
$invoer = sha1(mysql_real_escape_string($_POST['wachtwoord']));
$salt = "GjtehGRJ527sTG";
$pepper = "84JKDJGdjaHHda8";
$uitvoer = md5($pepper.$invoer.$salt);
echo $uitvoer;
?>
Is dit veiliger?
Kan het nog veiliger? Hoe?
Alvast bedankt!
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = "hierkomtwachtwoord".$salt;
?>
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = "hierkomtwachtwoord".$salt;
?>
en hieronder voorbeeld hoe dit toe te passen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$sql = "INSERT INTO members(name, password)
VALUES('name', '".sha1($pass)."')";
$aanmaken = mysql_query($sql);
if ($aanmaken === false){
echo mysql_error();
}
else {
echo "gelukt!";
}
?>
$sql = "INSERT INTO members(name, password)
VALUES('name', '".sha1($pass)."')";
$aanmaken = mysql_query($sql);
if ($aanmaken === false){
echo mysql_error();
}
else {
echo "gelukt!";
}
?>
note*: ik gebruik de sha1 pas in de query.
volgens mij hoef je geen mysql_real_escape_string te doen als je al sha1 gebruikt maar daar moet iemand anders maar even antwoord opgeven die het zeker weet.
ik doe altijd iets van
kan eigenlijk nouwelijks veiliger. kost je alleen een hoop geheugen door er extra encryptie overheen te gooien. voor een bruteforce attack maakt het niet uit, en uit de ecryptie de oorspronkelijke string terug te vinden is onmogelijk.
als je de salt/pepper ook nog eens dynamisch maakt, tada.
Jeroen vd op 01/05/2012 14:35:35:
je hoeft inderdaad bij een encryptie geen mysql_real_escpape_string() te gebruiken.
Lol, zit ik mezelf daar altijd zo druk om te maken. Haha. Ik gebruik altijd sha1 :P.
http://www.phphulp.nl/php/forum/topic/hash/82588/
En inderdaad mysql_real_escape_string is onnodig als je een wachtwoord hashed, vreemde tekens worden er toch al uit gehashed.
Ik zou een hogere Sha de voorkeur geven, is altijd beter.
Lees dit topic eens: En inderdaad mysql_real_escape_string is onnodig als je een wachtwoord hashed, vreemde tekens worden er toch al uit gehashed.
Ik zou een hogere Sha de voorkeur geven, is altijd beter.
Ik denk dat je sha256 of sha384 of sha512 bedoelt want sha245 bestaad niet naar mijn weten om. (kan er ook naast zitten)
Maar ik zou idd een random salt en pepper gebruiken en dan de random waarde samen in een appart veld zetten.
En aan de hand daarvan kan je checken of alles klopt.
ps. deze code kan je gebruiken om te kijken welke er allemaal zijn:
Code (php)
Gewijzigd op 01/05/2012 16:42:24 door Marco PHPJunky
ik bedoel inderdaad sha256.
Jullie hebben het over sha256, hoe zet ik dat in mijn code?
Sha256($password) doet niet wat sha1 wel doet..
Momenteel heb ik deze code:
ahs256, sha1, sha512, kan allemaal als de eerste paramater. zie php.net
anders maak je het jezelf alleen maar lastiger
Gewijzigd op 01/05/2012 17:06:06 door Reshad F
Gewijzigd op 01/05/2012 17:08:54 door Wouter J
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
class pass_secur{
function pass(){
$pepper = uniqid();
$salt = 'abcdefghijklmnopqrstuvwxzyABCDEGHIJKLMNOPQRSTUVWXYZ1234567890';
$pass = $_POST['password'];
$password = hash('sha256', sha1(($salt.$password.$pepper)));
}
}
function pass(){
$pepper = uniqid();
$salt = 'abcdefghijklmnopqrstuvwxzyABCDEGHIJKLMNOPQRSTUVWXYZ1234567890';
$pass = $_POST['password'];
$password = hash('sha256', sha1(($salt.$password.$pepper)));
}
}
Is dit goed zo?
(...)
Als je persé gebruik wil maken van een dynamische salt/pepper voer dan een leuke berekening uit op bijvoorbeeld de registratiedatum: haal hier 1001 dagen van af en je hebt een leuke salt. Je salt letterlijk in een database zetten is een cadeautje voor een hacker, niet doen dus. Random getallen zijn leuk maar helpen geen bal.
Gewijzigd op 01/05/2012 17:15:29 door Jens erd
Pak dan gewoon 1 lange zin uit een boek oid.
eerst en vooral bedankt voor de goede reacties.
@ Marco,
ik heb je 'script' uitgeprobeerd.
Er komen een hele boel cijfers tevoorschijn.
Maar als ik refresh verandert alle codes, hoe kan ik het wachtwoord dan controleren?
@ Wouter J, ik heb dit topic eens doorgenomen en kwam op dit script.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$salt = 'hier komt een moeilijke zin!'; // een static salt
$pepper = uniqid(); // een dynamische pepper
$ww = sha256($_POST[''password]); // real_escape_string overbodig in combinatie met een decrypter
$ww = $salt.$ww.$pepper; // breng alles bij elkaar en serveer een heel mooi diner
?>
$pepper = uniqid(); // een dynamische pepper
$ww = sha256($_POST[''password]); // real_escape_string overbodig in combinatie met een decrypter
$ww = $salt.$ww.$pepper; // breng alles bij elkaar en serveer een heel mooi diner
?>
in plaats van een uniqid bij pepper zou ik de registratiedatum - 1001 dagen doen.
Of is dit niet veilig genoeg?
of iets met het mailadres. of iets met het user_id. in ieder geval iets wat in de database staat en niet veranders kan worden (in ieder geval niet voor jouw applicatie, email kan veranderen, maar misschien niet bij jouw)
Misschien iets met het id.
Misschien iets erbij tellen, en dan delen door een lastig getal met kommas?
Toevoeging op 01/05/2012 18:57:20:
Om die pepper te bepalen, moet ik dan eerst de gegevens vanuit de database uitroepen en in een row zetten?
Denk wel dat jullie het zo bedoelen.