Encrypt MD5 look-a-like

Gepost door Ruben van Rooij op 02-08-2009 18:32.

Een functie om een look-a-like MD5 Hash te maken. Omdat er steeds grotere databases komen met MD5 hashes erin wou ik is iets anders maken. Ik weet dat er al heel wat rondzwerft, maar ik zou toch graag jullie mening hierover willen.

Bestanden van dit script

index.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
<?PHP

function Encrypt($sPassword) {
    $iStrLength = strlen($sPassword);

    $iPartLength = $iStrLength / 3;

    if(ceil($iPartLength) == $iPartLength) {

        // $iPartLength is een heel getal
        $aPartLength[0] = $iPartLength;
        $aPartLength[1] = $iPartLength;
        $aPartLength[2] = $iPartLength;
    } else {

        // $iPartLength is geen heel getal
        $aPartLength[0] = round($iPartLength);
        $aPartLength[1] = round($iPartLength);

        if($aPartLength[0] < $iPartLength) {
            $aPartLength[2] = round($iPartLength) + 1;
        } else {
            $aPartLength[2] = round($iPartLength) - 1;
        }
    }

    $aPart[0] = substr($sPassword, 0, $aPartLength[0]);
    $aPart[1] = substr($sPassword, $aPartLength[0], $aPartLength[1]);
    $aPart[2] = substr($sPassword, ($aPartLength[0] + $aPartLength[0]), $aPartLength[2]);

    $aHash[0] = sha1($aPart[0].$sPassword);
    $aHash[1] = sha1($aPart[1].$sPassword); 
    $aHash[2] = md5($aPart[2].$sPassword);
   
    $sHash = $aHash[0] . $aHash[1] . $aHash[2];

    $sHashSrambled = $sHash{13} . $sHash{0} . $sHash{45} . 
                     $sHash{10} . $sHash{3} . $sHash{42} .
                     $sHash{7} . $sHash{6} . $sHash{39} .
                     $sHash{76} . $sHash{9} . $sHash{36} .
                     $sHash{1} . $sHash{12} . $sHash{33} .
                     $sHash{16} . $sHash{65} . $sHash{30} .
                     $sHash{19} . $sHash{18} . $sHash{27} .
                     $sHash{22} . $sHash{21} . $sHash{48} .
                     $sHash{25} . $sHash{24} . $sHash{51} .
                     $sHash{28} . $sHash{54} . $sHash{75} .
                     $sHash{31} . $sHash{60};
    return $sHashSrambled;
}

echo Encrypt('LoveANDHate');
?>

Commentaar

02-08-2009 19:49

Wat voor een voordeel biedt dit ten opzichte van alleen md5(sha1(sha1('test'))) ?

Overigens moet je geen md5 meer gebruiken, maar gewoon direct naar sha1 kijken.

1
2
<? // 
?>
03-08-2009 10:52

Iets anders wat ik niet helemaal uit dit verhaal kan opmaken is de vraag of dit uberhaupt nog wel te decrypten is? Wat het dan alweer een stuk minder veilig zou maken als een sha/md5 algoritme

1
2
3
Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding. 

Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan.
03-08-2009 13:57

"
Iets anders wat ik niet helemaal uit dit verhaal kan opmaken is de vraag of dit uberhaupt nog wel te decrypten is? Wat het dan alweer een stuk minder veilig zou maken als een sha/md5 algoritme"

Anders als de titel doet vermoeden kan het niet gedecrypt worden. Zie dit stukje code [1]

Het enige wat je kan doen is die hash terug halen

1
2
3
4
5
<?
    $aHash[0] = sha1($aPart[0].$sPassword);
    $aHash[1] = sha1($aPart[1].$sPassword);
    $aHash[2] = md5($aPart[2].$sPassword); 
?>
03-08-2009 14:18

Werkt voor mij uitstekend.

1
2
3
4
5
6
7
8
<?php

define('SALT', 'x');
define('PEPPER', 'y');

$sPass = 'a';

echo sha1(sha1(SALT.$sPass.PEPPER));
03-08-2009 17:53

Ik gebruik altijd deze vorm om mijn gebruikers te laten inloggen. De $regDay is hierbij een 'dynamische' salt. Nadeel is dat je deze dan weer eerst moet ophalen...

1
2
3
4
5
6
7
8
<?php

function hashPassword($password, $regDay)
{
    return hash('sha512', md5($password) . $regDay . sha1($password));
}

?>
07-08-2009 12:31

En hoe veilig denken jullie dat het wordt als je dubbel gaat hashen? Je beperkt de input van de 2e hash waardoor de sterkte van het algoritme volledig naar de maan gaat. Als je wilt hashen, doe het dan goed en doe gewoon iets als:

$hash = sha1($salt . $data);

1
2
3
Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding. 

Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan.
08-09-2009 22:07

Leuk, md5-databazen... Helaas is dat voor die mensen met een salt (al dat niet dynamisch) alweer opgelost, dan doe je er eerst weer weken over om te achterhalen wat de salt is...

Overigens, denk je dat je met zoiets lulligs (no offense) iets beters hebt dan md5? Vergis je niet, voor wachtwoorden is md5 echt wel goed genoeg hoor. Er zit heel wat meer werk in md5 dan in dit, geloof me. Daar hebben briljante koppen zich aan gewaagd, die geven zoiets niet zomaar vrij. ;)

1
2
3
Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding. 

Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan.
Inloggen wachtwoord vergeten? Aanmelden