Autor Zpráva
kajaman
Profil
Podle PHP FAQ manuálu jsem zkusil hashování hesel pomocí fce crypt(), ale mám k tomu dvě věci, které nechápu:

1. při registraci uživatele, kdy si zadá svoje heslo se použije funkce crypt(), která je v PHP a do db se uloží vygenerovaný hash, to je OK, ale při přihlašování, kdy se má ověřit v MySQL pomocí fce ENCRYPT()
"SELECT users.* FROM users WHERE password = ENCRYPT('" . $password . "', password)";

to nefunguje na Windows, protože funkce crypt() není ve Windows implementována viz..
Takže bych si musel ten hash načíst do aplikace a porovnat pomocí PHP (pokud by server byl umístěn na Windows)?

1.1. pokud aplikaci píšu na Windows a pak bych chtěl umístit na Linux server, bylo by možné nějak odlišit logiku přihlašování pro development a production prostředí - detekovat OS pomocí PHP?

2. fce crypt() může použít pro hashování více algoritmů, pokud jsou na systému implementovány - jak se dá zvolit jeden konkrétní,
např. pokud chci, aby použila Blowfish?

Díky za komentáře!
Retal
Profil
Když už čtete manuál (chvályhodné), podívejte se přece na dokumentaci té funkce:
http://cz2.php.net/manual/en/function.crypt.php

Algoritmy odlišuje podle formátu soli.
Nepoužívejte při srovnávání funkci MySQL, ale zase crypt() a obejdete problém s chybějící knihovnou.
kajaman
Profil
Retal:
Algoritmy odlišuje podle formátu soli.

... ano, samozřejmě jsem četl... ale když nechám crypt() vygenerovat sůl automaticky, tak jaký si zvolíl algoritmus?

epoužívejte při srovnávání funkci MySQL, ale zase crypt()

... ano, ale na to jsem se právě přeci ptal, jestli to jde jinak, tohle je o jeden db dotaz navíc...
Davex
Profil
kajaman:
ale když nechám crypt() vygenerovat sůl automaticky, tak jaký si zvolíl algoritmus?
DES nebo MD5, pokud je dostupná.

tohle je o jeden db dotaz navíc...
Nevidím k tomu důvod. Zakódované heslo se jen spočítá v PHP před dotazem do DB.
kajaman
Profil
Davex:
Zakódované heslo se jen spočítá v PHP před dotazem do DB.

... ano, pokud máš salt stejnou pro všechny uživatele, nebo ji třeba dynamicky budeš počítat (třeba z loginu),
ale pokud má každý uživatel salt uloženou v databázi, musíš pro ni nejdříve sáhnout a potom zkombinovat
se zadaným heslem, zahashovat a hash zkontrolovat s hashem v db.

Na druhou stranu, pokud bych použil pro hashování funkci, kterou by databázový engine podporoval, můžu
vše vyřešit jedním dotazem. Jako v případě crypt() na Linuxu.

Díky oběma za odpovědi!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0