Autor | Zpráva | ||
---|---|---|---|
Falcon16 Profil |
#1 · Zasláno: 23. 10. 2005, 10:31:04
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 |
#2 · Zasláno: 23. 10. 2005, 10:46:21
Heslo nejdřív taky zašifruješ a potom je porovnáš s heslem v databazi.
|
||
Falcon16 Profil |
#3 · Zasláno: 23. 10. 2005, 11:39:11
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 |
#4 · Zasláno: 23. 10. 2005, 11:50:40
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 |
#5 · Zasláno: 23. 10. 2005, 12:37:00
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) 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 |
#6 · Zasláno: 23. 10. 2005, 13:17:43
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 |
#7 · Zasláno: 23. 10. 2005, 13:25:34
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 * |
#8 · Zasláno: 23. 10. 2005, 14:00:14
fce md5 zjakehokoliv hesla udela 32 znaku
|
||
igamenir Profil |
#9 · Zasláno: 23. 10. 2005, 14:06:02 · Upravil/a: igamenir
> 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 |
#10 · Zasláno: 23. 10. 2005, 22:23:57
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 |
#11 · Zasláno: 23. 10. 2005, 22:29:36
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 |
#12 · Zasláno: 24. 10. 2005, 02:22:43
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 |
#13 · Zasláno: 24. 10. 2005, 06:32:28
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 |
#14 · Zasláno: 24. 10. 2005, 11:17:16
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 |
#15 · Zasláno: 24. 10. 2005, 11:37:02 · Upravil/a: mackopu
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 |
#16 · Zasláno: 24. 10. 2005, 13:16:21
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 |
#17 · Zasláno: 24. 10. 2005, 15:43:10
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) |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0