Kodowanie w MD5-niezbyt proste

0

Witam. otóż mam pewien program..
Kodowałem hasła w zwykłym MD5 lecz teraz jest to bardzo ważne bym mógł kodować dany tekst
w md5(md5($salt).md5($pass)) .
Mój program wygląda na zasadzie.. Kopiuje hash z bazy danych MySQL użytkowników.. Wklejam to pliku txt.
W programie mam logowanie.. Użytkownik wpisuje hasło, klika loguj.. Wtedy jest one kodowane w md5(md5($salt).md5($pass)) i sprawdzane z dana linijka w pliku.txt. Jeżeli się zgadza to użytkownik ma dostęp do programu.

To wszystko mam wykonane lecz na zwykłym MD5, ponieważ korzystałem z forum phpbb tam hasła są tak kodowane. Teraz jestem na IPB i już jest ciężej.
Macie jakiś sposób jak zakodować tak hasło?

Probowalem zakodowac salt potem haslo no i ostatni krok oby dwie rzeczy na koniec, ale hash z haslem sie nie zgadza..

Korzystam z Delphi 7
Bardzo proszę o pomoc, jest to bardzo ważne (dla mnie). Użytkownicy czekają a ja kompletnie nie wiem co dalej robić.

0

Nie wiem jak... dlatego pisze.

1

Już widzę że do google zajrzeć nie łaska
http://forum.ks-ekspert.pl/topic/92572-ipb-kodowanie-hasla/

1

No sorry ale z tym google to przesada, szukalem, naprawde dlugo i nie znalazlem.
A to co ty mi podales nie rozwiazuje mojego problemu. Ja sie nie pytam czym sa hasla kodowane, tylko jak zakodowac dany tekst do md5(md5($salt).md5($pass))

Po drugie kłania się czytanie ze zrozumieniem, w tym co mi podałeś to forum IPB 2.1.7 (wtedy hasla byly kodowane inaczej)

3

A to co ty mi podales nie rozwiazuje mojego problemu. Ja sie nie pytam czym sa hasla kodowane, tylko jak zakodowac dany tekst do md5(md5($salt).md5($pass))

md5(md5(salt)+md5(pass));
Nie rozumiem czego oczekujesz. Masz salt i pass, tak? No to liczysz z obu md5 dodajesz i jeszcze raz md5. W czym masz problem? Jeśli się nie zgadza to znaczy że źle liczysz, poszukaj doców o tym jak to jest liczone.

Btw. Nie rozumiem jak w starych wersjach mogli używać sha1 a potem md5, to tak jakby cofać się? @.@

0
-pB_No- napisał(a):

Btw. Nie rozumiem jak w starych wersjach mogli używać sha1 a potem md5, to tak jakby cofać się? @.@

No nie wiem.. Sprawdzilem to sam poprzez generator online.. Wpisalem swoje haslo z forum, zakodowalo mi w md5(md5($salt).md5($pass)) sprawdzilem i dziala
Pisałem również na forum IPB i tez potwierdzili to.

Próbowałem zrobić tak:
Salt na Md5.... Pass na MD5... i potem mialem 2 hashe.. pierw wpisalem salt, od razu potym dalem pass i kodowalem znowu.. Jednak hash jest calkowicie inny od mojego hasla w bazie.. Mam nadzieje ze mnie zrozumiales.. Nie mógłbyś dać jakiegoś przykładu? Bawie sie z tym od wczoraj, calutka noc przesiedziałem i zero efektów :/

0

No nie wiem.. Sprawdzilem to sam poprzez generator online.. Wpisalem swoje haslo z forum, zakodowalo mi w md5(md5($salt).md5($pass)) sprawdzilem i dziala
Pisałem również na forum IPB i tez potwierdzili to.

Co to za 'generator onlajn'? Chodzi o generator hashu do tego IPB?
Zresztą skąd wiesz jak ci 'zakodowało' (poprawnie jest zahashowało)?
I co ci potwierdzili na forum IPB? Piszesz bardzo chaotycznie.

Próbowałem zrobić tak:
Salt na Md5.... Pass na MD5... i potem mialem 2 hashe.. pierw wpisalem salt, od razu potym dalem pass i kodowalem znowu.. Jednak hash jest calkowicie inny od mojego hasla w bazie.. Mam nadzieje ze mnie zrozumiales..

No to albo masz zły algorytm (czyli nie tak to się liczy), albo masz złą bibliotekę do md5/nie umiesz jej używać. Podaj dokładniej co to jest i sprawdź sobie czy dobrze wylicza md5 dla jakichśtam wartości (porównaj np z http://www.adamek.biz/md5-generator.php ). Jeżeli biblioteka md5 jest okej, to zapewne masz zły algorytm. Ja ciąglę myślę że to może być generowane sha1... Może sypnij linkami na czym się bazujesz, bo tutaj nie wszystkim chce się szukać czegośtam.

0

No dobrze, a więc powiem tak.
Założyłem testowego użytkownika..
Spróbuj sam zakodować te dane:
Hasło: test1234
Salt: 8VZTy

Hash powinien Ci wyjść taki: 06e8c1a781c3dce983e9f16b555097d0
Taki hash mam w bazie i taki sam hash wyszedł mi gdy kodowałem go na tej stronie:
http://www.insidepro.com/hashes.php?lang=eng#1 (w pole User Name nic nie wpisuj)
Wiec ja muszę źle to robić programując, albo nie wiem.
Sprawdź sam i powiedź czy Ci wyjdzie

P.S
Co do tematu na IPB gdy z nimi pisałem możesz zobaczyć go tu:
http://forum.invisionize.pl/topic/29549-rozwiazany-hash-hasla-w-bazie/
Streszczenie: Powiedzieli mi jak sprawdzić czym jest kodowane, i wyszło na moje.

@Edit

PODSUMOWANIE
Sprawdziłem.. i mój komponent w delphi poprawnie koduje MD5, lecz gdy chce do tego dodac salt to sobie nie radzi i wychodzi inny hash niz powinien..
Poszukam jakiegoś komponentu i dam znać co i jak, chyba że macie jakiś sprawdzony? Lub nazwe dobrego?

0

Hash powinien Ci wyjść taki: 06e8c1a781c3dce983e9f16b555097d0

I taki wychodzi.

Wiesz co z tego wynika? Że możesz nam pokazać wreszcie kod który to ma liczyć i możesz dodatkowo podać jakiej biblioteki używasz do liczenia (o co wcześniej prosiłem i nie łaska była powiedzieć).

(Ohoh edit to ja też zrobię 'edit'): EDIT:

Sprawdziłem.. i mój komponent w delphi poprawnie koduje MD5, lecz gdy chce do tego dodac salt to sobie nie radzi i wychodzi inny hash niz powinien..

Żartujesz co nie? Md5(a+b)=Md5(a)+md5(b)? Ktoś tu chyba nie rozumie nawiasów w matematyce.
Daj kod to ktoś milszy ode mnie ci go poprawi.

0

Zamiast głupio komentować to mógłbyś się pierw zapytać.
ROZUMIEM nawiasy, do szkoły chodziłem, matematyke miałem :) Przeciez mowie ze na stronie mi wychodzi. Również na tej twojej mi wyszło :)
Ale w programie to już nie daje rady, może i napisałem źle i problemem jestem ja..
Biblioteka MD5: Jak w Delphi hashować używając algorytmu MD5
A kod za chwilkę podam

@Edit

Prosze bardzo.. Jednak kod to za malo:
"MD5 := MD5String(sEdit1.Text);"
Zalaczam spakowana paczke w ZIP projektu, pas itd.
I powiedz mi co teraz sherloku..

0

SZERLOKU! Jak zapewne wiesz (chociaż prawdopodobnie nie), md5 operuje tak naprawdę na bajtach. Żeby uzyskać hash z napisu trzeba go zamienić na ciąg bajtów. Jak pewnie wiesz (prawdopodobnie nie), każda litera ma w danym kodowaniu przyporządkowaną wartość liczbową. Jak pewnie wiesz (prawdopodobnie nie) DUŻE i małe litery to NIE są te same znaki.

Gdybyś nie był tak bardzo przeświadczony o swojej nieomylności i nie zwalał winy na wszystko naokoło, wliczając w to biblioteki, które były używane z powodzeniem przez wiele osób i wkleił swój kod w pierwszym poście, problem byłby rozwiązany w drugim.

0

ROZUMIEM nawiasy
"MD5 := MD5String(sEdit1.Text);"

No właśnie z tego wynika że nie rozumiesz. Mówiłem ci już: Md5(a+b) TO NIE md5(a)+md5(b).
Jak komuś będzie się chciało to tobie napisze a jak nie to musisz umieć matematykę na poziomie gimnazjum, żeby to zrobić. Podpowiem tak: ile razy masz md5 w swoim algorytmie a ile w kodzie? No właśnie, więc zrób to tak żeby te algorytmy robiły to samo. A jeżeli nie zdałeś jeszcze gimnazjum (i/lub nie pamiętasz o co kaman w tym całym gimnazjum) to poczekaj aż ktoś milszy ode mnie ci pomoże, może ktoś się ulituje nad sierotką marysią.

I powiec mi co teraz sherloku..

Nie znam takiego słowa jak 'powiec' więc ci nie powiem @.@

0
-pB_No- napisał(a):

ROZUMIEM nawiasy
"MD5 := MD5String(sEdit1.Text);"

No właśnie z tego wynika że nie rozumiesz. Mówiłem ci już: Md5(a+b) TO NIE md5(a)+md5(b).
Jak komuś będzie się chciało to tobie napisze a jak nie to musisz umieć matematykę na poziomie gimnazjum, żeby to zrobić. Podpowiem tak: ile razy masz md5 w swoim algorytmie a ile w kodzie? No właśnie, więc zrób to tak żeby te algorytmy robiły to samo. A jeżeli nie zdałeś jeszcze gimnazjum (i/lub nie pamiętasz o co kaman w tym całym gimnazjum) to poczekaj aż ktoś milszy ode mnie ci pomoże, może ktoś się ulituje nad sierotką marysią.

I powiec mi co teraz sherloku..

Nie znam takiego słowa jak 'powiec' więc ci nie powiem @.@

Od końca..
Literówka. Przepraszam miało byc "powiedz".
Gimnazjum skonczylem juz dawno temu. I nie bede sie tlumaczyl co jak i dlaczego, moze tylko tyle ze za granicą mieszkam 10 lat i rzadko pisze po polsku.
Nie robie (a+b) ! Nie rozumiemy sie i wychodza problemy! Z a na hash.... 'b' na hash... i wtedy dwa hashe razem i wychodzi wynik... Prawidlowy wynik!

0
Rev napisał(a)

SZERLOKU! Jak zapewne wiesz (chociaż prawdopodobnie nie), md5 operuje tak naprawdę na bajtach. Żeby uzyskać hash z napisu trzeba go zamienić na ciąg bajtów. Jak pewnie wiesz (prawdopodobnie nie), każda litera ma w danym kodowaniu przyporządkowaną wartość liczbową. Jak pewnie wiesz (prawdopodobnie nie) DUŻE i małe litery to NIE są te same znaki.

Gdybyś nie był tak bardzo przeświadczony o swojej nieomylności i nie zwalał winy na wszystko naokoło, wliczając w to biblioteki, które były używane z powodzeniem przez wiele osób i wkleił swój kod w pierwszym poście, problem byłby rozwiązany w drugim.

Nie SZERLOKU, nie wiem ze md5 operuje na bajtach :) o tym by zamienic ciag bajtow NIE wiedziałem :) To ze kazda litera ma przypadkowa wartość liczbową, wiedziałem :) o duzych i małych znakach wiedzialem :) A jezeli chodzi o ta biblioteke to faktycznie dziala, bo sam z niej korzystałem dlugo, ale dodajac salt naprawde nie zadziałało mi. Podając wam gotowiec, też nie powiedzieliście czy działa, czy nie :) Jedno jest zabawne (dla mnie).. Ze ty zwalajac teraz cala wine na mnie.. mowiac ze to moja wina a ja obwiniam komponenty.. moja odpowiedz jest krotka i mam nadzieje ze da cos do myslenia bo normalne to nie jest..
Uzylem innej funkcji z google.. Tamta biblioteke usunalem.. Uzylem dokladnie tego samego kodu i wszystko DZIALA... wiec jezeli to naprawde byla moja wina... czemu teraz to dziala? Gdy nic nie zmienialem? Bez sensu dyskutowac.. Napisałem by otrzymać pomoc od Was a nie sie klocic.. Wiec koncze to.

Funkcja ktora rozwiazala sprawe bez bicia:

 
function md5(const Input: String): String;
var
  hCryptProvider: HCRYPTPROV;
  hHash: HCRYPTHASH;
  bHash: array[0..$7f] of Byte;
  dwHashBytes: Cardinal;
  pbContent: PByte;
  i: Integer;
begin
  dwHashBytes := 16;
  pbContent := Pointer(PChar(Input));
  Result := '';
  if CryptAcquireContext(@hCryptProvider, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT or CRYPT_MACHINE_KEYSET) then
  begin
    if CryptCreateHash(hCryptProvider, CALG_MD5, 0, 0, @hHash) then
    begin
      if CryptHashData(hHash, pbContent, Length(Input) * sizeof(Char), 0) then
      begin
        if CryptGetHashParam(hHash, HP_HASHVAL, @bHash[0], @dwHashBytes, 0) then
        begin
          for i := 0 to dwHashBytes - 1 do
          begin
            Result := Result + Format('%.2x', [bHash[i]]);
          end;
        end;
      end;
      CryptDestroyHash(hHash);
    end;
    CryptReleaseContext(hCryptProvider, 0);
  end;
  Result := AnsiLowerCase(Result);
end;

Wiec powiem jeszcze raz:
Uzyłem tego samego sposoby liczenia, i wszystko dziala.. Problem jednak był po stronie tego starego komponentu

1

Wiesz dlaczego borykasz się z tym problemem tyle czasu? Bo nie czytasz ze zrozumieniem, nie analizujesz kodu ani wyników, które otrzymujesz. Napisałeś nawet program, który ci pokazał w czym leży problem, a ty go dalej nie widziałeś.

jezeli to naprawde byla moja wina... czemu teraz to dziala? Gdy nic nie zmienialem?

Bo tamten komponent zwracał tekstową reprezentację MD5 z wielkimi literami, a ten zwraca z małymi.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.