sha1+salt inladen in database
Als ik een csv inlaad in de database met paswoorden zonder sha1+salt bij het inloggen werken de paswoorden niet meer. Hoe kan dit?
ik voer in in wachtwoord php
de php zet dan het wachtwoord om in sha1
nadien kijkt hij of dat wachtwoord en gebruikersnaam in 1 tabel hetzelfde zijn.
zo ja ga verder
zo niet fout
als je php ingeeft in het wachtwoord veld dan gaat hij dus niet op zoek in de database naar php maar naar de omzetting ervan.
Je bedoelt dat de niet-gehashte variant van de wachtwoorden in de database geïmporteerd worden en dat vervolgens de inlogprocedure (die de wel-gehashte variant gebruikt) niet meer werkt? Dat lijkt me vanzelfsprekend aangezien je in de database natuurlijk ook de gehashte versie moet hebben, of begrijp ik je verkeerd?
Ja precies, ik ben blij dat je het wat beter kan omschrijven. Nog suggesties hoe ik de wachtwoorden kan omzetten naar sha1 + salt voordat ik het inlaad in de database?
Klein PHP scriptje schrijven? 1. Lees CSV uit, 2. Hash met salt, 3. Input in database. Klaar is kees ;-)
Ok bedankt! Toevallig een linkje naar waar ik zo'n scriptje kan downloaden?
Dat zal er waarschijnlijk niet zijn, maar je kunt dit snel schrijven als je wilt.
Heb je misschien een voorbeeldje om me opweg te helpen?
Het oude bestand wordt ook behouden voor de zekerheid, maar zo krijg je een nieuwe CSV die je gewoon kan inladen in PHPmyAdmin.
Hier dan de code:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
# The name of the file:
$filename = 'test.csv';
$new_filename = 'test2.csv';
# The place of the password:
$place = 1;
# When the file exists:
if((file_exists($filename)) && (is_numeric($place))) {
# Open the CSV file:
$file = fopen($filename, 'r');
# The newline:
$newlines = '';
# Read each line:
while($line = fgetcsv($file, filesize($filename), ',')) {
for($i = 0; $i <= count($line) - 1; $i++) {
# The newline for the file:
if($i != $place)
$newlines .= '"'.$line[$i].'"';
else {
# Make a salt:
$salt = substr(str_shuffle('0123456789').rand(1000,9999), 6);
# Hash the password + the salt:
$new_pass = sha1($salt.$line[$i]);
# Add the salt + the pass to the newline:
$newlines .= '"'.$new_pass.'","'.$salt.'"';
}
if($i != count($line) - 1)
$newlines .= ',';
else
$newlines .= "\r\n";
}
}
# Write everything to the new file:
$new_file = fopen($new_filename, 'w');
fwrite($new_file, $newlines);
fclose($new_file);
}
?>
# The name of the file:
$filename = 'test.csv';
$new_filename = 'test2.csv';
# The place of the password:
$place = 1;
# When the file exists:
if((file_exists($filename)) && (is_numeric($place))) {
# Open the CSV file:
$file = fopen($filename, 'r');
# The newline:
$newlines = '';
# Read each line:
while($line = fgetcsv($file, filesize($filename), ',')) {
for($i = 0; $i <= count($line) - 1; $i++) {
# The newline for the file:
if($i != $place)
$newlines .= '"'.$line[$i].'"';
else {
# Make a salt:
$salt = substr(str_shuffle('0123456789').rand(1000,9999), 6);
# Hash the password + the salt:
$new_pass = sha1($salt.$line[$i]);
# Add the salt + the pass to the newline:
$newlines .= '"'.$new_pass.'","'.$salt.'"';
}
if($i != count($line) - 1)
$newlines .= ',';
else
$newlines .= "\r\n";
}
}
# Write everything to the new file:
$new_file = fopen($new_filename, 'w');
fwrite($new_file, $newlines);
fclose($new_file);
}
?>
Als je eens een andere salt wilt, herlaad dan gewoon dit bestand en voilà, een nieuwe salt + password wordt dan in het bestand geschreven.
Edit
De code is een klein beetje geupdate, er zijn twee onnodige variabelen verwijderd. Ik heb even de code op 200.000 lijnen of code (CSV bestand) geprobeerd en het werkte perfect.
Hopelijk lukt alles, veel succes ermee met het veiliger maken van de wachtwoorden.
Echt super bedankt! Ga er mee aan de slag. Fijne avond!
Groeten,
Michiel
Het lukte me steeds maar niet om het script goed werkend te krijgen. Ik ben er nu achter dat het hem zit in de $line [$i].
Bijvoorbeeld van het paswoord: ziggo1234
wordt gelezen in de waarde $line [$i] als: paswoord 1234
De letters worden dus weggehaald, hoekan dit?
LOAD DATA INFILE
Kijk ook eens naar Gewijzigd op 07/02/2012 10:14:55 door Ger van Steenderen