Wachtwoord genereren, hoeveel veiliger kan dit?
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
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
<?php
function txt_to_pass ($txt = NULL, $times = 3){
$alfa = 'abcdefghijklmnopqrstuvwxyz0123456789';
$beta = 'kgnvy39bwmp41sjx02eqfci6lau8hdrzt7o5';
$txt = isset($txt) ? $txt : NULL;
$new_pass = '';
for ($check=0; $check<strlen($txt); $check++){
$letter = substr($txt, $check, 1);
$found = '0';
for ($i='0'; $i<=strlen($beta); $i++){
if (substr(strtolower($alfa), $i, 1) == strtolower($letter)){
$found = '1';
if ($letter === strtolower($letter)){
$new_pass .= substr(strtoupper($beta), $i, '1');
} elseif($letter === strtoupper($letter)) {
$new_pass .= substr(strtolower($beta), $i, '1');
} else {
$new_pass .= $letter;
}
}
}
if ($i > strlen($beta) && $found == '0'){
$new_pass .= $letter;
}
}
for ($i=0; $i<$times; $i++){
$new_pass = strrev($new_pass);
$new_pass = sha1($new_pass);
}
return $new_pass;
}
print txt_to_pass('Mijn Wachtwoord!', 1).'<br />'.PHP_EOL;
print txt_to_pass('Mijn Wachtwoord!', 5).'<br />'.PHP_EOL;
print txt_to_pass('MijnWachtwoord', 5).'<br />'.PHP_EOL;
?>
function txt_to_pass ($txt = NULL, $times = 3){
$alfa = 'abcdefghijklmnopqrstuvwxyz0123456789';
$beta = 'kgnvy39bwmp41sjx02eqfci6lau8hdrzt7o5';
$txt = isset($txt) ? $txt : NULL;
$new_pass = '';
for ($check=0; $check<strlen($txt); $check++){
$letter = substr($txt, $check, 1);
$found = '0';
for ($i='0'; $i<=strlen($beta); $i++){
if (substr(strtolower($alfa), $i, 1) == strtolower($letter)){
$found = '1';
if ($letter === strtolower($letter)){
$new_pass .= substr(strtoupper($beta), $i, '1');
} elseif($letter === strtoupper($letter)) {
$new_pass .= substr(strtolower($beta), $i, '1');
} else {
$new_pass .= $letter;
}
}
}
if ($i > strlen($beta) && $found == '0'){
$new_pass .= $letter;
}
}
for ($i=0; $i<$times; $i++){
$new_pass = strrev($new_pass);
$new_pass = sha1($new_pass);
}
return $new_pass;
}
print txt_to_pass('Mijn Wachtwoord!', 1).'<br />'.PHP_EOL;
print txt_to_pass('Mijn Wachtwoord!', 5).'<br />'.PHP_EOL;
print txt_to_pass('MijnWachtwoord', 5).'<br />'.PHP_EOL;
?>
Regel 6 lijkt me wat overbodig, aangezien je dat op regel 3 ook al doet. Als er geen eerste string wordt geleverd, dan is $txt altijd NULL.
Tenslotte doe je dat met $times ook niet.
Voor de rest, prima zo toch?
crypt() doet iets vergelijkbaars....
Tenslotte doe je dat met $times ook niet.
Voor de rest, prima zo toch?
crypt() doet iets vergelijkbaars....
Ik zou er trouwens dit van maken:
function txt_to_pass ($txt = '', $times = 3){
Binnenin de functie wordt $txt overal gebruikt als string. Dan liever een lege string dan een NULL
function txt_to_pass ($txt = '', $times = 3){
Binnenin de functie wordt $txt overal gebruikt als string. Dan liever een lege string dan een NULL
Regel 11: $i wordt defineerd als string en wordt dan incremented++. Zal vast wel werken, zeer vreemd wel.
$found lijkt als boolean te worden ingezet, gebruik dan ook true en false in plaats van string waarders '0' en '1'
regel 14 type controle overbodig.
Maar je originele vraag: ja het kan altijd veiliger, bcrypt() is een van de veiligste, zo niet de veiligste.
Even de uitleg:
Regel 8-26: je genereerd / verandert letters op een bepaalde manier --> kan gekraakt worden. Dit is zeg maar een beetje geheimcode zoals we dat op school deden, het alfabet en dan 5 letters verschuiven (maar dan de geavanceerde versie).
Regel 27-30: $times op 1 of 5 instellen is nog te snel. strrev() voegt verder niets toe aan het moeilijker maken om te kraken (relatief). sha1 is een twijfelachtig hashing algoritme gebruik sha256 als je al geen bcrypt wil gebruiken.
En verder .. waar is je salt ?!?! als $beta een salt moet voorstellen dan pak je dezelfde salt voor ieder wachtwoord. Maar je moet voor ieder wachtwoord een nieuwe unieke sat genereren en deze samen met het wachtwoord opslaan.
$found lijkt als boolean te worden ingezet, gebruik dan ook true en false in plaats van string waarders '0' en '1'
regel 14 type controle overbodig.
Maar je originele vraag: ja het kan altijd veiliger, bcrypt() is een van de veiligste, zo niet de veiligste.
Even de uitleg:
Regel 8-26: je genereerd / verandert letters op een bepaalde manier --> kan gekraakt worden. Dit is zeg maar een beetje geheimcode zoals we dat op school deden, het alfabet en dan 5 letters verschuiven (maar dan de geavanceerde versie).
Regel 27-30: $times op 1 of 5 instellen is nog te snel. strrev() voegt verder niets toe aan het moeilijker maken om te kraken (relatief). sha1 is een twijfelachtig hashing algoritme gebruik sha256 als je al geen bcrypt wil gebruiken.
En verder .. waar is je salt ?!?! als $beta een salt moet voorstellen dan pak je dezelfde salt voor ieder wachtwoord. Maar je moet voor ieder wachtwoord een nieuwe unieke sat genereren en deze samen met het wachtwoord opslaan.
De salt hoort niet in deze functie.
Dit is alleen het genereren van een random string, voor bijv. een password.
De encryptie komt er later bovenop... ;-)
Dit is alleen het genereren van een random string, voor bijv. een password.
De encryptie komt er later bovenop... ;-)
Gewijzigd op 22/08/2012 13:05:41 door - Ariën -
Voor het genereren van een random string heb je geen input nodig 'Mijn Wachtwoord!'.
Verder wordt er ook geen encryptie toegepast bij wachtwoorden maar hashing.
Verder wordt er ook geen encryptie toegepast bij wachtwoorden maar hashing.
Waarom zou dit beter zijn dan:
Waarom wil je het genereren van een wachtwoord veilig maken?
Wat dacht je van deze Pim ? ;-)
Wat dacht je van deze Pim ? ;-)
Code (php)
1
2
2
<?php
$pass = substr(str_shuffle('abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789'), 0, rand(6,8));
$pass = substr(str_shuffle('abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789'), 0, rand(6,8));




