Waarom zou je nog eens hash(), sha1() en md5() erratum toe willen voegen? Het standaard geheel is al veilig zat. En anders kan je de 'cost' iets ophogen.
Als je een lange hash nog eens door een algoritme voor een kortere hash haalt, maak je het geheel onveiliger.
Als je bijvoorbeeld 10.000 wachtwoorden door een hash met maar 1.000 mogelijke combinaties haalt, houd je niet 10.000 maar slechts 1.000 combinaties over. Iets soortgelijks gebeurt wanneer je md5(sha1(…)) gebruikt: je beperkt het grotere aantal combinaties van SHA-1 tot het kleinere aantal combinaties van MD5.
Daarom is jouw variant md5(hash('sha256', sha1(md5('test')))) technisch eigenlijk gewoon even erg, maar veroorzaakt die daarnaast nog schijnveiligheid: je lijkt sterk te coderen met SHA-256, maar verzwakt de boel tot MD5.
Dit soort dingen vind ik zelf ook altijd lastig te begrijpen.
>> Als je bijvoorbeeld 10.000 wachtwoorden door een hash met maar 1.000 mogelijke combinaties haalt, houd je niet 10.000 maar slechts 1.000 combinaties over.
Ward, mag ik even van de gelegenheid gebruik maken om je te complimenteren met je duidelijke antwoord. Hoe je het hier uitlegt, is erg helder. Een ketting is zo sterk als z'n zwakste schakel ... in dit geval dus die md5.
Nee natuurlijk is dat niet veiliger, het maakt voor de volgorde niets uit, alleen de zwakste schakel telt.
Een hacker die sha256 kan achterhalen kan de rest ook achterhalen.
Ik zou voor de zekerheid ook geen PASSWORD_DEFAULT gebruiken, wat zal er namelijk gebeuren als de default verandert? Dan werkt je login routine opeens niet meer met bestaande accounts.
Oké, maar dan wordt het dus password_hash(ww, PASSWORD_BYCRYT) ipv password_hash(ww, PASSWORD_DEFAULT)
Maar is sha256 niet veiliger? Of maakt dat niet zo veel uit?