Topic: md5() kodavimo dekodavimo skriptukas

Sweiki, viename is forumu man pasake
jog uzkodaves skaiciu md5() funkcijos pagalba niekad to skaiciaus ne decoduosi...

Pagalvojau ir sukuriau - http://www.ipsistemos.org/index.php?id= … c7e7ab8cd1

Cia yra klase kuri koduoja ir decoduoja teigiamus skaicius.

Uzkodaves taip skaiciu ji galima perduoti ir su POST ir su HIDDEN ir GET metodu pagalba, ir tai bus saugu.

Kitas klausymas kiek resursu tam prireiks ir kiek bendrai tas dalykas reikalingas... :)

P.s Butu labai idomu isgirsti mindes komentara.

Aciu.

Pagarbiai. manjana

2 (edited by Armands 2007-10-25 14:13:57)

Re: md5() kodavimo dekodavimo skriptukas

Uzkodaves taip skaiciu ji galima perduoti ir su POST ir su HIDDEN ir GET metodu pagalba, ir tai bus saugu.

Aš tai čia nematau didelio saugumo.

Kitas klausymas kiek resursu tam prireiks

Prireiks prireiks, priklausomai nuo skaičių.

kiek bendrai tas dalykas reikalingas

O čia jau tu mums pasakyk. Jei kažką kuri, tai bent jau tikslą žinok.

Re: md5() kodavimo dekodavimo skriptukas

Labas,

manjana wrote:

Sweiki, viename is forumu man pasake
jog uzkodaves skaiciu md5() funkcijos pagalba niekad to skaiciaus ne decoduosi...

Tu php.lt forume rašei, cituoju:

Aisku darant savo svetainei negalima perdavineti $_GET metodu. Geriausiai tai slepti su postais,hidden ar md5() funkcija kaip kam patinka.

Tau kažkas kažką rašė php.lt forume. Cituoju:

post ir hidden nėra slėpimas, o iš md5 kainos neiškrapštysi, tai neverta net bandyti taip perdavinėti.

šiuo atveju, kalbant konkrečiai apie md5() algoritmą, reikia nepamiršti, kad tai yra vienkryptė funkcija, ir kad ir ką su ja "užkoduosi", "atkoduoti" galėsi tik parinkinėdamas visus variantus (arba naudotis sugeneruotais žodynais/duomenų bazėmis). žodžius "koduoti" ir "dekoduoti" vartoju kabutėse, nes kalbant apie md5() ir panašius algoritmus labiau tiktų naudoti tokius terminus kaip: "maišos kodas", "santrauka" ir pan. Tolimesniame tekste dėl bendro susikalbėjimo naudosiu tavo terminus :)

Taigi žmogus parašęs, kad užkodavęs su md5() nelabai dekoduosi dalinai buvo tesus, bet kartu dalinai ir neteisus - čia turint omenyje, kad kalbama abstrakčiai, nesigilinant nei į duomenų ilgį ir įvertinant tai, kad kalbama apie standartinį funkcijos md5() panaudojimą.

manjana wrote:

Pagalvojau ir sukuriau ....

Cia yra klase kuri koduoja ir decoduoja teigiamus skaicius.

Peržvelgus algoritmą darosi aišku, kad tavo sukūrtas algoritmas nėra įrodymas, kad galima dekoduoti md5() užkoduotus duomenis. Kodėl? Ogi todėl, kad pas tave yra naudojama mišrus abėcėlės ir kažkokių veiksmų algoritmas. md5() funkcija čia naudojama tik kaip pagalbinė funkcija generuoti abėcėlei. Vietoje jos gali būti bet kuri kita funkcija, tiek standartinė - plačiai žinoma - tiek tavo pačio sugalvota. šiuo atveju aš visiškai palaikau vieno iš komentatorių nuomonę, cituoju:

Tai nebus saugu, nes tai yra "security through obscurity" - saugu, kol niekas nežino kaip veikia.

Tik papildysiu, kad tokie mėginimai sukurtį kažkokį tai saugų algoritmą yra praktiškai betiksliai, nes žmonės, dirbandys su kriptografija tokius algoritmus sulaužys kaip degtukus. Viena iš pagrindinių taisyklių dirbant šioje srityje yra: "Nekurk savo kriptografijos algoritmų, jeigu nesi šios srities profesionalas".

Taigi vertindamas šitą parašymą:

manjana wrote:

Uzkodaves taip skaiciu ji galima perduoti ir su POST ir su HIDDEN ir GET metodu pagalba, ir tai bus saugu.

.. noriu pasakyti, kad jis yra neteisingas, ir duomenys bus tikrai nesaugūs. Toks teiginys tiesiog klaidina naujokus sudarydamas neteisingą "saugumo" jausmą.

Toliau.. kadangi pateiktas pavyzdys gali būti traktuojamas tik kaip PHP sintaksės bei algoritmavimo mokymasis, tai ties tuo ir pakomentuosiu:
a) lieku prie savo ankčiau išsakytos nuomonės, kad kintamojo kūrimas konstruktoriuje gali būti ydingas, ir tai reikėtų iškelti į klasės header'į.
b) toliau tie visi dinaminiai pirminių reikšmių užpildymo (abėcėlės sudarymo) algoritmai iš esmės yra gerai, bet konkrečiu atveju rekomenduočiau naudoji jau užpildytą masyvą, kad kas karta veikiant algoritmui nebūtų viskas dinamiškai generuojama. Kitaip sakant klasės antraštėje iš karto galima deklaruoti pirminius duomenis:

$all_val = array(
[0] = "jf34kjh235kjy45y34y346";
[1] = "jf34kjh235kjy45y34y435";
...
);

c) eiliutę:

$var=preg_split('//',$var,-1,PREG_SPLIT_NO_EMPTY);

siūlau keisti į:

$var=str_split($var);

d) kodą:

foreach($this->flipped as $mad=>$var)
{
$str1=str_replace($mad,$var,$str1);
}

gaima laisvai keisti į:

$str1 = str_replace($this->all_val, $this->flipped, $str1);

e) Iš principo neteisingai naudoji "konstrutoriaus" mechanizmą, nes naudoji savo sugalvotą konstruktoriaus veikimą. Užtenka klasėje sukurti metodą, tokiu pačiu pavadinimu kaip ir klasė, ir tas metodas bus vykdomas objekto sukūrimo metu automatiškai (PHP4 atveju) arba naudoti __construct() metodą (PHP5 atveju). Dėl bendro suderinamumo, norint, kad kodas gana sėkmingai veiktų tiek PHP4 tiek PHP5 varikliuose rekomenduoju naudoti pirmąjį variantą, nes jis yra palaikomas ir PHP5.
f) Taip pat manau, kad iš principo pats algoritmas yra neteisingas, nes jeigu patestuotum su daug įvairių sveikių skaičių, tai rastum atvejus, kai duomenys bus neteisingai dekoduojami. Tai įvyks dėlto, kad tu naudoji papildomą simbolį (raidę, konkrečiu atveju tašką (.)) kaip skaičių skiriklį. Yra nemaža tikimybė, kad greitai susidarys tokia situacija, kai skiriklio dalis su šalia esančio skaičiaus dalimi sudarys tokią pačia kaip skiriklio santrauką (hash'ą) ir tavo skaičius bus neteisingai sukapojamas. šitą dalyką galima ištaisyti nenaudojant jokio skiriklio, o tiktai skaidant eilutę į gabalus po 32 simbolius (nes md5() funkcijos rezultatas yra 32 simbolių eilutė).
g) Turint omenyje, kad pats rekomenduoji šiuos duomenis perdavinėti per GET/POST nėra jokio funkcionalumo, kurio pagalba būtų galima patikrinti ar gauta eilutė yra tikrai tavo funkcijos užkoduoti duomenys, nėra net eilinės validacijos.

Pradžiai tiek. (-;

Re: md5() kodavimo dekodavimo skriptukas

Zinai, kada uzsiima tuom kad atkoduoti tokia nesamone - tai labai labai kazkam tai reikia to atkodavimo,

Isivaizduosim kad tau reikia per tarkim $_GET['id']

PVZ:

http://www.mysql.lt/forumas/viewtopic.php?id=365

Tiesiog perjungineti dokumentus...

Ir tu uzkoduoji ji per koki nors algoritma ir galu gale gaunasi pas tave

http://www.mysql.lt/forumas/viewtopic.php?id=blablalba...

Tarkim tu esi Xack dievas...

Tu pradesi lauziti nuo id???...

Minde pavyzdziui tu, ar uzsiimtum

sakiciu

4a9bd19b3b8676199592a346051f950c750961c06b2fd124b7c9efb8e115508deb4fe264c10eb7a528b047aa983a4829

nulauzimu, kuris reiskia, sakysim, prekes kieki kuri tu uzsakineji? tam kad padaryti is kiekio 2, kieki 3?

Arba kieki 1. Kox skirtumas - vistiek viskas eis is tavo userio saskaitos.

Re: md5() kodavimo dekodavimo skriptukas

manjana wrote:

Minde pavyzdziui tu, ar uzsiimtum

sakiciu

4a9bd19b3b8676199592a346051f950c750961c06b2fd124b7c9efb8e115508deb4fe264c10eb7a528b047aa983a4829

nulauzimu, kuris reiskia, sakysim, prekes kieki kuri tu uzsakineji? tam kad padaryti is kiekio 2, kieki 3?

Arba kieki 1. Kox skirtumas - vistiek viskas eis is tavo userio saskaitos.

Aš ar kažkas kitas tuo gali užsiimti vien tik dėl sportinio intereso, kažką nulaužti, išsiaiškinti, patikrinti savo žinias ir įgudžius.

Kalbant apie konkretų algoritmą, tai patikėk, jis yra labai greitai nulaužiamas - turint omenyje, kad jo abėcėlę sudaro tik 11 skirtingų simbolių. Turint veikiančia sistemą, kurioje gali eksperimentuoti (generuoti naujas eilutes) tą abėcėlę išsiaiškinti tikrai nebus sunku. Nenoriu kategoriškai teigti, bet man atrodo, kad egzistuoja net automatizuoti įrankiai tokiems algoritmams laužyti.

Taip pat jau klasikiniu tapęs pavyzdys, kai kažkokiame internetiniame e-shop'e prekės kaina buvo perdavinėjama per parametrus, o sistema praktiškai pilnai automatizuota - kažkas tiesiog modifikavo prekių kainas ir pigiai apsipirko. čia tuo atveju jeigu perduoti prekės kainą - tai pas tave parduotuvėje kažkas galės apsipirkti už vieną centą.

Taip pat, mano komentarai pagrinde orientuoti į PHP/algoritmą, o ne į saugumą/kodavimą.

Re: md5() kodavimo dekodavimo skriptukas

Armands wrote:

Aš tai čia nematau didelio saugumo.

Armandai, kur dingo p4i.lt? (-;

Re: md5() kodavimo dekodavimo skriptukas

Truputį pamasčius supratau, kad mano f) komentaras nelabai teisingas, nes iš tikro egzistuoja tik 11 skirtingų hash'ų, iš kurių komponuojama eilutė. Ir galima iš anksto patikrinti, ar kokia nors iš jų kombinacija (pora) dirbtinai nesudaro vieno iš jau naudojamų hash'ų. Tikimybė, kad taip atsitiks iš tikro nėra labai didelė, bet aišku egzistuoja. ši, kad ir menka, problema egzistuotų net ir tuo atveju jeigu nebūtų skiriklio. Ji gali tapti daug aktualesnė ten, kur bus daug skirtingų hash'ų.

8 (edited by Armands 2007-10-25 19:19:53)

Re: md5() kodavimo dekodavimo skriptukas

manjana wrote:

Minde pavyzdziui tu, ar uzsiimtum
sakiciu
4a9bd19b3b8676199592a346051f950c750961c06b2fd124b7c9efb8e115508deb4fe264c10eb7a528b047aa983a4829
nulauzimu, kuris reiskia, sakysim, prekes kieki kuri tu uzsakineji? tam kad padaryti is kiekio 2, kieki 3
Arba kieki 1. Kox skirtumas - vistiek viskas eis is tavo userio saskaitos.

O koks tikslas "saugot" tokius "svarbius" duomenis, tokiu neefektyviu algoritmu?

minde wrote:

Armandai, kur dingo p4i.lt? (-;

Na tai baigėsi domeno galiojimas, o jo savininko nėra tarp mūsų. Arba bandysim susisiekt, arba lauksim kol atsilaisvins.

Re: md5() kodavimo dekodavimo skriptukas

Armands wrote:

Na tai baigėsi domeno galiojimas, o jo savininko nėra tarp mūsų. Arba bandysim susisiekt, arba lauksim kol atsilaisvins.

O tai ne AlgisMu buvo persirašęs jį ant savęs?

Re: md5() kodavimo dekodavimo skriptukas

Na kažką jis ten tarės, bet savininkas liko wonderman. Ir šiaip galėtum čiate daugiau lankytis, būtumę prisitrynę po mysql sparneliu laikinai :D

Re: md5() kodavimo dekodavimo skriptukas

Na chat'ams nėra laiko. O šiaip galit glaustis :) jeigu tik kuo galiu padėt.

Re: md5() kodavimo dekodavimo skriptukas

šnekėjau su Algiu vakar, sakė varys į Lietuvą lapkričio pirmoj pusėj ir pabandys sutvarkyt. O jei ką, tai tas 30 dienų neprailgs per daug, manau :)