Autor Zpráva
Falcon16
Profil
Robim registraciu a potrebujem, aby sa mi zasifrovalo heslo a dat ho do MySQL. to sa mi sice cez CRYPT() podari, ale neviem to potom porovnat, ci je zadane heslo a heslo v databaze zhodne.
Budem vdacny za pomoc, za script sa hnevat nebudem. Moze byt aj iny sposob sifrovania ako mam teraz, len nech je to funkcne, lebo ma to uz doziera. diky moc
story
Profil
Heslo nejdřív taky zašifruješ a potom je porovnáš s heslem v databazi.
Falcon16
Profil
skusal som niekolkokrat, mozno zle, ALE
Ak by som mal v databaze nastaveny kratky VARCHAR, heslo by sa tam nezmestilo, tak by to nikdy sa nezhodovalo. Mohlo by to byt tym? Heslo podla podmienok nemoze byt dlhsie ako 15 znakov, ako dlhe bdue heslo ked sa zasifruje?
Falcon16
Profil
No, akosi to nechce stale chodit. Ked som dal VARCHAR na 50, tak sifrovane heslo bolo este dlhsie. Navyse som skusal zadat niekolkokrat to iste heslo, ale vzdy to zasifrovalo inak. A teraz som uz vazne v koncoch
mackopu
Profil
Zkus šifrovat pomocí fce MD5(), to je standard.
Heslo podle podmínek třeba nemůže být delší než 15 znaků, ale to platí pro jeho zadávání a ne ukládání v databázi. Varchar dej klidně 100.
Takže např.:
if(MD5($heslo_z_prihlasovaciho_formulare) == $heslo_z_databaze)

{
// provedení nějakých instrukcí
}

přičemž heslo do databáze bylo při registraci vloženo např.:
INSERT INTO tabulka (jmeno, heslo) VALUES ('".$_POST["jmeno"]."', '".MD5($_POST["heslo"])."'
Falcon16
Profil
Diky, uz to funguje, najvacsi problem bol v tom, ze som mal "kratku" databazu. Nechcel som aby bola datovo objemna, ale nakoniec to bolo to, preco to nakoniec nefungovalo. Aspon mam ponaucenie dobuducna
mackopu
Profil
Jinak délku jakkoliv zašifrovaného 15ti místného hesla zjistíš jeho výpisem na monitor, např.:
echo MD5($_POST["heslo"]);

Nejsem si jist, zda je ta délka proměnlivá, ale po pár pokusech si lze udělat představu a varchar nastavit s rezervou.
error414-
Profil *
fce md5 zjakehokoliv hesla udela 32 znaku
igamenir
Profil
> No, akosi to nechce stale chodit. Ked som dal VARCHAR na 50, tak sifrovane heslo bolo este dlhsie. Navyse som skusal zadat niekolkokrat to iste heslo, ale vzdy to zasifrovalo inak. A teraz som uz vazne v koncoch

S křížkem po funuse, ale třeba to pomůže někomu jinému:
K zašifrování hesla můžeš použít mysql funkce PASSWORD, která by měla jednosměrně zašifrovat řetězec a to pokaždé stejně. Nevím jak ve starších databázích, ale v novějších to pokaždé šifruje na 43 znaků (netuším, proš tak blbě).

Takže vložení:
mysql_query("INSERT INTO uzivatele(jmeno, heslo) VALUES ('$jmeno', PASSWORD('$heslo');");
A porovnání
mysql_query("SELECT * FROM uzivatele WHERE jmeno = '$jmeno' AND heslo = PASSWORD('$heslo');");

Takhle to používám a bez problémů mi to funguje (na MySQL 5.0.13).
para
Profil
Přesně tak, funkce PASSWORD() byla vytvořena jednosměrně proto, aby nebylo heslo (ani pro admina) možné zpětně dekódovat.
koudi
Profil
Přesně tak, funkce PASSWORD() byla vytvořena jednosměrně proto, aby nebylo heslo (ani pro admina) možné zpětně dekódovat.

Ono ani z MD5() se to heslo dostat nedá.
mackopu
Profil
To tedy z žádné šifrovací funkce; jinak není šifrovací.
Osobně se ale musím přiznat, že to nepoužívám, protože moji klienti jsou hlavy děravé a rád zapomenutá hesla edituji v PhpMyAdminovi, což v podobných případech zabere nejmíň času. Navíc Admin Je Admin a Ví Všechno a pokud si tím vydělává, tak za to i ručí a je víc než zpovědník. To není něco tak nezávazného jako fórum (nic ve zlém); protě když jde tlusté do tenkých, tak někdo MUSÍ vědět všechno. Dokonce to ošetřuje smlouva.
Kdo nesouhlasí, jen do mě :-)
Hugo
Profil
mackopu

To tedy z žádné šifrovací funkce; jinak není šifrovací.

To není pravda, existují symetrické a asymetrické šifry. Symetrické se dají zpětně rozkódovat (při znalosti klíče), asymetrické se nedají (pouze pomocí hrubé síly).
igamenir
Profil
mackopu
> moji klienti jsou hlavy děravé a rád zapomenutá hesla edituji v PhpMyAdminovi
Myslím, že je jedno, jestli se při zapomenutém hesle dozvím to heslo, nebo nějaké nové vygenerované.

> Navíc Admin Je Admin a Ví Všechno
Dlouho přemýšlím o důvěryhodnosti stránek, než se na ně zaregistruji, ale i pak předpokládám, že některé údaje jsou skryté i pro administrátora. Jsem totiž registrovaný na hodně stránkách a na všech mám stejné jméno a heslo.
mackopu
Profil
Hugo
To jsem nevzal v potaz, předpokládal jsem, že se tu bavíme jen o asymetrických šifrách. Ale pravdu samozřejmě máš.
igamenir
Zapomněl jsem vysvětlit, že stránky, na ktrých to páchám, jsou firemní administrací pro pracovníky jisté firmy, kteří jsou rozptýleni po celé republice, nikoliv prezentací, která láká k registraci. Neregistrují se a heslo je jim přiděleno. Pokud si jej přejí změnit, musím o tom z pozice své práce vědět a editovat ho sám - to pro případ, že by se dotyčnému nedejbože něco stalo. A není tam prostor na fintičky typu "Zadané heslo již existuje, zadejte jiné".
Jinak souhlas. Osobně se na weby registruji s krajní nechutí a nerad sděluji důvěrné informace. Toto fórum je ovšem výjimkou ;-)
para
Profil
No myslím že admin by měl být člověk, který nemá potřebu vědet hesla svých klientů.

>Myslím, že je jedno, jestli se při zapomenutém hesle dozvím to heslo, nebo nějaké nové vygenerované.
Naprostý souhlas.
igamenir
Profil
Když už se tu tak rozběhla diskuze o kódování, tuší někdo, jak funguje funkce crypt? Je symetrická nebo asymetrická? Je spolehlivá?

Jenom připomenu:
$zakodovaneheslo = crypt($heslo)
$jetoono = crypt($heslo, $zakodovaneheslo)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0