Autor | Zpráva | ||
---|---|---|---|
stuchlej Profil |
#1 · Zasláno: 24. 12. 2009, 23:37:32
Dobrý den.
Chco se zeptat, jestli v PHP není nějaká "věc" která dokáže šifrovat text a pak ho pomocí hesla dešifrovat. Asi nějak takhle: Mám text v $text_pred_sifrvanim a heslo v proměné $heslo Ta nějaká věc mi to pomocí tohodle zašifruje a zašifrovaný text se vrátí v $zasiforovany_text Pak to chci dešifrovat. mám tedy siforovany text v $zasiforovany_text a jako klíč použiji $heslo Dešifrovaný text se vrátí třeba v proměné $po_desifraci Totiž přemíšlel jsem o tom jak každému uživateli vytvořit jiné heslo, které by bylo klíčem k vlastní kopii zašifrovaného hesla k databázi (MySQL). Abych totiž nemusel opravdové heslo k databázi nikdy do kódu napsat. Děkuji Stuchlej |
||
Nox Profil |
#2 · Zasláno: 24. 12. 2009, 23:41:11 · Upravil/a: Nox
jde použít mcrypt knihovnu (viz manuál)
|
||
stuchlej Profil |
#3 · Zasláno: 24. 12. 2009, 23:44:45 · Upravil/a: stuchlej
Dobře jaký manuál? Pokud ten php.net tak ten mi moc nepomůže... chodím do 7 třídy ZŠ
Byl by jste tak hodný a napsal nějaký příklad? Taky používám free hosting na wz.cz |
||
Nox Profil |
#4 · Zasláno: 25. 12. 2009, 10:02:11
zjistit jestli to existuje pomocí phpinfo(); (pokud bude fungovat, někde je zakázané...pak by mělo být možné ho najít na webu hostingu)
moc jsem to nepoužíval, ale napíšu tu nějaký tip jak se to používá víceméně na základě příkladů z manuálu $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $key = "Tvuj tajny klic"; $text = "To co chceš zašifrovat"; // argumenty: algoritmus, klic, co se ma sifrovat, mod, nějaká incializační hodnota... vytvoří se dle 1. a 2. řádku (v případě módu CBC, CFB nebo OFB nebo některých streamů) $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); MCRYPT_RIJNDAEL_256 - znamená že se bude používat 256bit verze algoritmu Rijndael, seznam zde: http://www.php.net/manual/en/mcrypt.ciphers.php a popisy algoritmů by mohly být na wikipedii nebo přes google, ale asi to bude celkem složité (stejně předpokládám že neděláš nic supertajného, takže to bude jedno) MCRYPT_MODE_ECB - jakýsi mód šifrování: - MCRYPT_MODE_ECB: vhodný pro krátké texty, například kódy, hesla atd. - MCRYPT_MODE_CBC: vhodný na soubory - MCRYPT_MODE_CFB: pro bytové streamy další jsou spíš takové speciální $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $key = "Tvuj tajny klic"; $desifrovane = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv); |
||
stuchlej Profil |
#5 · Zasláno: 25. 12. 2009, 10:13:08
Díky moc. Mě jde jen o to, aby si někdo heslo nepřešetl přímo z kódu. To by potom heslo ztratilo trochu víznam...
|
||
Alphard Profil |
#6 · Zasláno: 25. 12. 2009, 10:37:21
|
||
stuchlej Profil |
#7 · Zasláno: 25. 12. 2009, 10:50:13
Ještě jedna věc. wz.cz toto asi neposporuje protože při spuštění skriptu, který zakóduje text se napsalo toto
Fatal error: Call to undefined function: mcrypt_get_iv_size() in /3w/nazory.cz/f/federace/pokus.php on line 2 Nevíte někdo o nějakém free hstingu, který podporuje MySQL a knihovnu Mcrypt? (Váš kód jsem nechal nezměněn až na to že jako klíč jsem dal 'ahoj', jako šifrovvany text 'bender je buh' a na poslední řádlek jsem dal příkaz echo;) |
||
stuchlej Profil |
#8 · Zasláno: 25. 12. 2009, 10:51:32
O hash jsem četl je pouze jednosměrný ale já potřebuji zakódovat heslo k MySQL, tak aby nebylo na očích...
|
||
Alphard Profil |
#9 · Zasláno: 25. 12. 2009, 11:46:40
stuchlej:
„ale já potřebuji zakódovat heslo k MySQL“ Na FTP má přístup ještě nějaký útočník? Zajímavé :-) Běžně se nechává v konfiguračním souboru. Někte v kódu stejně musíte nechat klíč přo šifrování, takže si moc nepomůžete. „Nevíte někdo o nějakém free hstingu, který podporuje MySQL a knihovnu Mcrypt?“ Možná ic.cz, ale nezaručím vám to. |
||
mckay Profil |
#10 · Zasláno: 25. 12. 2009, 11:50:35
stuchlej:
A proč to neuděláš nějak takto: když ukládám heslo, uložím ho v md5 a sha1 $heslo = md5(sha1("prisne_tajne_heslo")); Když potom ověřuješ, jestli je heslo správné, uděláš to samé s přijatým heslem, a ověříš jestli se shoduje s tím v databázi. $heslo = md5(sha1($_POST["heslo"])); // pokud přichází heslo v $_POST $row = mysql_fetch_assoc(mysql_query("select ...")); // tady vybereš data pro uživatele který se snaží přihlásit if($row["heslo"] != $heslo){echo "Zadal jste špatné heslo";exit;} // tady otestuješ, jestli se hesla shodují, když ne, tak uživatele vyhodíš, nebo třeba přesměruješ |
||
Alphard Profil |
#11 · Zasláno: 25. 12. 2009, 12:21:35
mckay:
Pochopil jsem to tak, že chce šifrovat heslo pro připojení k databázi (parametr pro mysql_connect). Tam mu hash bude skutečně na dvě věci... |
||
mckay Profil |
#12 · Zasláno: 25. 12. 2009, 12:26:24 · Upravil/a: mckay
mckay:
ach tak, potom jsem se snažil tedy zbytečně:D |
||
Webonym Profil * |
#13 · Zasláno: 25. 12. 2009, 12:35:03
Když už zde padlo slovo hash, mám dotaz. Je bezpečnější hašovat md5(sha1 nebo sha1(md5?
|
||
mckay Profil |
#14 · Zasláno: 25. 12. 2009, 12:38:02
Webonym:
Pravděpodobně je to jedno, na itcoru, je o tom bezpečném hashi docela dobrý článek. ;-) |
||
DoubleThink Profil * |
#15 · Zasláno: 25. 12. 2009, 13:02:20
stuchlej:
Řešíš hlouposti. Serverový filesystem běžných hostingů se pro účely webových aplikací považuje za bezpečný a soukromý. Je pravda, že u WZ pravděpodobně neplatí ani jedno ani druhé - alespoň pokud administrátory z doby mého hostování nenahradili vyššími formami života. Tvou starostí by měla být jen bezpečnost skriptů. A šifrovat hesla k databázi symetrickou šifrou je blbost, pokud bys nepoužíval jako klíče třeba hesla uživatelů (tj. něco co fyzicky není na serveru). I tak - prohánět fotky svého křečka přes Triple-DES je plýtváním energií na blbosti. |
||
Nox Profil |
#16 · Zasláno: 25. 12. 2009, 14:55:54
Webonym:
Ani MD5 ani SHA1 nejsou žádné zázraky... pokud to řešíš až tak, je podle mě lepší použít SHA256 nebo SHA512 a řádně osolit |
||
Časová prodleva: 2 měsíce
|
|||
stuchlej Profil |
Dobrý den.
Po dlouhé době kdy mi to jelo se najednou něco stalo. Zde je skript, později bude popis chyby. function stext($key,$text){ $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); $_SESSION['ct'] = $crypttext; } function ustext($key,$crypttext){ $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $desifrovane = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv); $_SESSION['uct'] = $desifrovane; } session_start(); include 'index.php'; stext('ahoj','Ja jsem stuchlej'); echo $_SESSION['ct']; echo '<br>'; ustext('ahoj',$_SESSION['ct']); echo $_SESSION['uct']; if ( $_SESSION['uct'] == 'Ja jsem stuchlej') echo '<br> ano'; else echo '<br> ne'; Vypíše se toto É9ÂýőH…ď‹A �ł®%,[ú"�ŇĐ”f�L(„\ Ja jsem stuchlej ne Poraďte prosím. |
||
stuchlej Profil |
#18 · Zasláno: 20. 2. 2010, 19:26:56 · Upravil/a: stuchlej
Vyřešeno.
Do funkce jsem přidal regulérní výraz. Funkce vypadá takto: function ustext($key,$crypttext){ $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $text = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv); $rv = '[a-zA-Z0-9 ]*'; if (!@ereg($rv, $text, $zu)) echo 'error Chyba v dekodovani'; $_SESSION['uct'] = $zu['0']; } |
||
Časová prodleva: 14 let
|
0