Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak zakodowac najprosciej plik
Forum PHP.pl > Forum > Gotowe rozwiązania
jokergti
chcialem zakodowac plik tekstowy z haslami a pozniej przy odczycie go zdekodowac. Poniewaz nie umiem oblugiwac md5() ani innych takich, a ze potrzebuje prosciutkiego kodowania (chodzi o to by na pierwszy rzut oka pomyslec ze to jest zakodowane i juz zostawic w spokoju) chcialem napisac skrypt do kod i dekod przy uzyciu preg_replace. Ale kompletnie to mi nie wychodzi, tzn powstaja caly czas jakies problemy, a to zaszyfruje dobrze i nie odszyfruje a to odwrotnie i takie rozne. na koncu dolaczam listing programu, ale jakby ktos mial jakies inne pomysly wraz z przykladami to bardzo bym chetnie wysluchal (przeczytal)
[php:1:7245c17ea0]<?php


$plik=fopen("tekst.txt","r");
//$plik2=fopen("szyfr.txt","w");

$maska[0]="/1/";
$maska[1]="/2/";
$maska[2]="/3/";
$maska[3]="/4/";
$maska[4]="/5/";
$maska[5]="/6/";
$maska[6]="/7/";
$maska[7]="/8/";
$maska[8]="/9/";
$maska[9]="/a/";
$maska[10]="/b/";
$maska[11]="/c/";
$maska[12]="/d/";
$maska[13]="/e/";
$maska[14]="/f/";
$maska[15]="/g/";
$maska[16]="/h/";
$maska[17]="/i/";
$maska[18]="/j/";
$maska[19]="/k/";
$maska[20]="/l/";
$maska[21]="/m/";
$maska[22]="/n/";
$maska[23]="/o/";
$maska[24]="/p/";



$zmien[24]="a";
$zmien[23]="b";
$zmien[22]="c";
$zmien[21]="d";
$zmien[20]="e";
$zmien[19]="f";
$zmien[18]="g";
$zmien[17]="h";
$zmien[16]="i";
$zmien[15]="j";
$zmien[14]="k";
$zmien[13]="l";
$zmien[12]="m";
$zmien[11]="n";
$zmien[10]="o";
$zmien[9]="p";
$zmien[8]="q";
$zmien[7]="r";
$zmien[6]="s";
$zmien[5]="t";
$zmien[4]="u";
$zmien[3]="w";
$zmien[2]="y";
$zmien[1]="x";
$zmien[0]="z";




while(!(feof($plik))){

$dane=fgets($plik);
print("$dane<br>");

$kod=preg_replace($maska,$zmien,$dane);
print("$kod<br>");

//fputs($plik2, "$kod");

}
//fclose($plik2);


fclose($plik);

?>[/php:1:7245c17ea0]
scanner
[php:1:a5c4d63002]<?php
$niezakodowane = "costam";
$zakodowane = md5($niezakodowane);
?>[/php:1:a5c4d63002]Po co kombinujesz?
dob
Jak chcesz miec mozliwosc zakodowania i odkodowania to użyj funkcji base64_encode() i base64_decode()

[php:1:ee9b07c7df]<?php
$tekst="Jakis tekst do zakodowania";

//kodowanie
$zakodowany=base64_encode($tekst);
echo("$zakodowany");


//rozkodowanie
$rozkodowany=base64_decode($zakodowany);
echo("$rozkodowany");

?>[/php:1:ee9b07c7df]
jokergti
dzieks za odpowiedz
scanner
hasła powinno się kodowac jednostronnie, algorytmem uniemożliwiającym dekrypcję. Takim jak np. [manual:bf6751b7cb]md5()[/manual:bf6751b7cb].
dchcorp
jokergti: nawet jak ktoś zobaczy hasła zakodowane przez md5, to może nie popuścić. Ja bym sobie przyjemności dekodowania nie odpuścił smile.gif
spenalzo
Cytat
jokergti: nawet jak ktoś zobaczy hasła zakodowane przez md5, to może nie popuścić. Ja bym sobie przyjemności dekodowania nie odpuścił smile.gif

Życzę powodzenia. Jak Ci się uda, to powiadom nas - o ile to forum za kilka lat będzie jeszcze istneć. Zdekoduj mi np. to:
5ab5d99f2bc796a8fda074e7587979bc - i powiedz gdzie mieszkam i w jakim powiecie.
FiDO
Tak?? To prosze bardzo... odkoduj MD5. Sława gwarantowana.. Tymczasem, do uslyszenia za 1000 lat winksmiley.jpg


spenalzo: we Wrześni? biggrin.gif
spenalzo
Cytat
spenalzo: we Wrześni? :D

Nie :-P - chodzi mi o dokładną nazwę miejscowości. (powiat już mu zdradziłeś :-), więc musze zmienić)

W poniższym ciągu masz mój dokładny adres. Wyślij mi kartkę (lub raczej moim prapraprawnukom) jak odkodujesz.
Kod
96c3550c6a8e329010909813005fe5a6
FiDO
I tu błąd, w tym kodzie nie ma Twojego adresu...
MD5 tak nie dziala. To jest stratne szyfrowanie (dlatego jednostronne) i nie da sie tego odwrocic. Przeciez 500MB plik tez ma swoj hash MD5, a chyba nikt nie sadzi, ze z 32 bajtow da sie odtworzyc caly plik biggrin.gif
spenalzo
Cytat
MD5 tak nie dziala. To jest stratne szyfrowanie (dlatego jednostronne) i nie da sie tego odwrocic.

Ja wiem. Ale można do tego dojść inaczej, np. przez porównywanie różnych ciągów.
KaMeLeOn
Cytat
Ja wiem. Ale można do tego dojść inaczej, np. przez porównywanie różnych ciągów.

Może jak w końcu kosmici u nas wylądują to nam pomogą... będzie szybciej niż za 1000 lat :wink:
spenalzo
Cytat
Może jak w końcu kosmici u nas wylądują to nam pomogą... będzie szybciej niż za 1000 lat :wink:

Dlatego napisałem mu, że jak znajdzie adres, to niech moim praprapraprapraprawnukom kartkę wyśle. laugh.gif
dchcorp
hmm
Ale na mnie najechaliscie.
Już wyjasniam o co mi chodzilo.
Są ludzie, którzy ustawiają sobie krótkie hasła - 4,5 liter
Zrobiłem sobie kiedyś słowniczek(dosc duzo zajmuje) zahasowanych haseł od a do zzzzz, na wiecej mi nerwow nie starczylo.
I 5-literowe zahashowane hasła(z samych liter) to sobie moge spokojnie odczytac. Dajmy na to że w takim pliczku są zapisane hasła 300 userów, to duze prawdopodobienstwo, ze komus haselko zlamie.

Waszych adresików nie połamie, chce tylko autorowi tematu uświadomić że trzymanie w zwykłym pliku to nie jest dobre rozwiązanie.

A wy mnie jak ostatnia lame potraktowaliscie smile.gif
Przeciez mam racje
DeyV
Metodą brutalForce można oczywiście złąmać każde hasło. Tj. nie tyle znaleźć to hasło, jak raczej znaleść ciąg, który posiada taki sam hash. Ale przy kombinacji 32 znaków (tyle ma md5) jestto i tak na tyle duża liczba, że ...
dchcorp
Cytat
Ale przy kombinacji 32 znaków (tyle ma md5) jestto i tak na tyle duża liczba, że ...


Ale dla 3,4,5, nawet 6 znakow to jest mozliwe nawet na zwyklym pc'cie, nie trzeba do tego jakiejs super machiny.
Liczylem kiedys ile zajmie slownik dla 32-znakowego ciagu skladajacego sie z cyfr i liter(malych i duzych). Wyszlo mi ze nierealne jest wygenerowanie takiego slownika(za duzo zajmuje: cos rzedu 10^48 GB - moglem sie pomylic w obliczeniach).
spenalzo
Cytat
Ale przy kombinacji 32 znaków (tyle ma md5) jestto i tak na tyle duża liczba, że ...

MD5 zwraca małe litery, których jest 25. Miesza to razem z 10 cyframi.
Razem mamy 35 możliwych kombinacji na jedną pozycję. Pozycji jest 32 - więc policz sobie ile to jest.

Czyli tutaj się kłania matematyka (o ile nic nie popieprzyłem) - korzystając z pojęcia wariacji z powtórzeniami (ponieważ kolejność jest istotna i elementy mogą się powtarzać) więc mamy: 35^32 możliwych kombinacji ciągów, czyli mamy około 25 714 460 626 335 800 000 000 000 000 000 000 000 000 000 000 000
możliwych kombinacji.
FiDO
Dla 32 znaków przy założeniu 48 (duze i male) liter i 10 cyfr to jest jakies 58^32 co wg kalkulatora windowsowego daje liczbe o 57 cyfrach, wiec faktycznie troche za duzo. A jakby jeszcze policzyc ze chcesz wszystkie ciagi o dlugosci od 4 do 32 znakow to juz nawet liczyc mi sie nie chce smile.gif
spenalzo
Ale wydaje mis ię że MD5 daje tylko małe litery...
dchcorp
porownaj stringi;
print md5('dchcorp') . '<br>' . md5('DCHCORP');
nie testowalem, ale wydaje mi sie ze bedzie roznica.

Jednak sie da odczytac hasla zahashowane md5...
A tak negatywnie byliscie nastawieni do mojego 1-go posta w tym topicu. smile.gif
spenalzo
Cytat
porownaj stringi;
print md5('dchcorp') . '<br>' . md5('DCHCORP');
nie testowalem, ale wydaje mi sie ze bedzie roznica.

Trochę nieprecyzyjnie napisałem - chodziło, że md5 zwraca tylko małe litery.

Cytat
Jednak sie da odczytac hasla zahashowane md5...

Mhm, jasne. Odczytać się NIE DA, chyba, że ZGADNĄĆ metodą słownikową czy losowym podstawianiem ciągów. Ale to nie jest odczytanie. Ale jeżeli nadal twierdzisz, że możesz odczytać mój adres (96c3550c6a8e329010909813005fe5a6) to wyślij mi kartkę - na mój koszt.
FiDO
Cytat
Ale wydaje mis ię że MD5 daje tylko małe litery...

Tak, ale jemu chodzilo o zrobienie slownika 32 znakowego do testowania brute force.

Cytat
porownaj stringi;
print md5('dchcorp') . '<br>' . md5('DCHCORP');
nie testowalem, ale wydaje mi sie ze bedzie roznica.

Oczywiscie, ze bedzie i to spora, w zasadzie zwrocone stringi beda zupelnie inne. Nawet jedna literka inna powoduje duze roznice.
Cytat
Jednak sie da odczytac hasla zahashowane md5...
A tak negatywnie byliscie nastawieni do mojego 1-go posta w tym topicu.

No wiesz ... metodą brute force to kazdy szyfr da sie odszyfrowac w teorii.
Ale na tym to polega, ze jest to praktycznie niemozliwe, bo wymaga za duzo czasu.
spenalzo
Ech, co ja chrzanię?
Przecież porównuje się wynik kodowania w md5 z jakimś ciągiem...
dchcorp
Cytat
Ale jeżeli nadal twierdzisz, że możesz odczytać mój adres (96c3550c6a8e329010909813005fe5a6) to wyślij mi kartkę - na mój koszt.


Ty chyba chcesz zebym wyladowal w psychatryku smile.gif
Moge za pomoca mojego slowniczka odczytac krotke hasla, ale zawsze to cos i metoda hashowania md5 nie jest calkowicie bezpieczna, a tym bardzej przechowywane hashow hasel w plku tekstowym, do ktorego teoretycznie kazdy ma dostep, jak to chcial zrobic autor topicu
--
Pozdrawiam
spenalzo
Teraz tak całkiem OT.
Npisałem sobie najprostszy skrypt:
[php:1:4110df18b0]<?php
set_time_limit(0);

$time=time();

function uid($l)
{
$pool="abcdefghijklmnoprsqtuvxyz";
$pool.="ABCDEFGHIJKLMNOPRSTUVXYZ";
$pool.="1234567890"; // losowanie z tych znaków
for($i=0; $i<$l; $i++)
{
$s.=substr($pool,(rand()%(strlen($pool))),1);
}
return($s);
}

$txt=md5("dupa"); // tekst
$i=0;
while(1)
{
$i++;
$ciag=uid(rand(1,4)); // ilość losowanych znaków
if(md5($ciag)==$txt)
{
echo "<br><b>Odkodowano w ".$i." próbie w czasie ".(time()-$time)." sekund. </b><br>";
flush();
die();
}
else
{
if(!($i%50000))
{
echo $i." prób bez rezultatu po czasie ".(time()-$time)." sekund.<br>";
flush();
}
}
$file=@fopen("proby.txt","a");
@fwrite($file,$ciag."n");
@fclose($file);
}
?>[/php:1:4110df18b0]
i oto jakie mam wyniki:

Tekst: dupa
Losowanie ze znaków: tylko małe litery
Ilość losowanych znaków: 4 (sztywno określone)
Czas odgadnięcia tekstu: 59 sekund
Liczba prób: 429 768
Plik wynikowy: 2,45 MB


Tekst: dupa
Losowanie ze znaków: tylko małe litery
Ilość losowanych znaków: 1-4
Czas odgadnięcia tekstu: 149 sekund
Liczba prób: 1 631 407
Plik wynikowy: - MB


Tekst: dupa
Losowanie ze znaków: tylko małe i duże litery
Ilość losowanych znaków: 1-4
Czas odgadnięcia tekstu: 823 sekund
Liczba prób: 8 339 097
Plik wynikowy: 65,3 MB


(nieukończone)
Tekst: spenalzo
Losowanie ze znaków: małe i duże litery + cyfry 0-9
Ilość losowanych znaków: 1-16
Czas odgadnięcia tekstu: 5149 sekund
Liczba prób : 45 300 000
Plik wynikowy: 522 MB

Wszystkie litery bez polskich znaków.
Athlon XP 2200+, 512 RAM, Apache 2.0.39, php 4.2.2

A może macie jakieś inne pomysły na skrypt - ten jest bardzo primitywny.

PS. Uprzedzam pytania: tak, lekko się nudzę :-)
spenalzo
No, mam nadzieję że powyższym postem uświadomiłem co niektórym że odkodowanie MD5 przy obecnych komputerach nie jest raczej możliwe.

--------------------------
Małe sprostowanie - złamianie - nie odkodowanie winksmiley.jpg (DeyV)
shw
da sie da. nawet przy dzisiejszych kompach.
byl kieedys program w jakiejs telewizji i angole z jakiejstam agencji mowili, ze owszem - mozna to zlamac bruteforce, podawali jakiestam czasy.
ba - bylo tez o lamaniu PGP. otoz np. przy pgp szyfrowanie musi byc dziurawe - inaczej rzad nie dopuscilby do uzytku programu, ktorego nie moze odszyfrowac.
bylo tez o szyfrowaniu jakistam plikow. mowili, ze haslo do archiwum mozna zlamac w kilka sekund, lecz metoda udostepniona na rynku, skonstuowana jest specjalnie, aby zlamanie hasla do archiwum trwalo o wiele dluzej.

nie pamietam co to byl za program, nie pamietam na jakiej telewizji, nie pamietam w jakim jezyku, ale pamietam, ze takowy byl.
a tak wogole, to metoda w php jest... troche... wolna.
niemniej jednak zlamanie md5, pomimo mozliwosci jest cholernie czasochlonne.
DeyV
Suma sumarum
Md5 złąmać można (choć komu by sie chciało) ale
Md5 ODKODOWAĆ NIE MOŻNA.

pozdrowienia dla wszystkich niedowiarków. PA
shw
mozna zawsze napisac programik podobny do Seti@HOME i wykorzystac kilku userow do zlamania hasel w md5 smile.gif
adwol
Cytat
Ale wydaje mi się że MD5 daje tylko małe litery...

Dla ścisłości: funkcja md5 zwraca liczbę 128-bitową, a nie małe litery. Można ten wynik zapisać jako sekwencję 32 cyfr szesnastkowych (chyba o to Ci chodzilo) i wtedy na każdej z pozycji jest cyfra dziesiętna albo litera od A do F (wielkość nie ma znaczenia).
Niemniej nie zmienia to faktu, że ilość możliwych wartości tej funkcji jest 2^128 czyli ok. 10^38. Przeszukanie takiej przestrzeni wyników faktycznie przekracza jeszcze możliwości współczesnych komputerów.
jokergti
ja mam pytabie jeszcze odnosnie tego md5, jak zakodowac plik wiem, ale jak pozniej go zdekodowac, tzn gdzie jest klucz do tego szyfru, jak wyglada procedura odkodowania danych, bo raczej niepotzrebuje zakodowanego pliku z haslami tak ze pozniej nie moge ich odczytac
KaMeLeOn
Cytat
ja mam pytabie jeszcze odnosnie tego md5, jak zakodowac plik wiem, ale jak pozniej go zdekodowac, tzn gdzie jest klucz do tego szyfru, jak wyglada procedura odkodowania danych, bo raczej niepotzrebuje zakodowanego pliku z haslami tak ze pozniej nie moge ich odczytac

Ehh...
Proszę pan jokergti żeby przeczytał dokładnie (słowo w słowo) cały wątek.
A co do umieszczania zakodowanych haseł w pliku, proszę wpisać w wyszukiwarce md5 i czytać.

EOT.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.