[PostgreSQL] - hashowanie hasła w bazie a PHP

0

Hej,

Utworzyłem sobie prościutką bazę danych w PostgreSQL, która zawiera id, nazwę użytkownika oraz hasło zahashowane za pomocą funkcji crypt (algorytm BF). W wyniku tego dostałem hasło zapisane w wariancie $2a$. Teraz, przy użyciu PHP, potrzebuję porównać hasło wpisane przez użytkownika w formularzu z hasłem z bazy danych. Jeśli zahaszuję je za pomocą funkcji password_hash() w PHP, to dostanę hasło w wariancie BF $2y$.

Pytanie brzmi: jak to ugryźć? Czy PostgreSQL może utworzyć hasło w wariancie $2y$ lub czy w PHP da się wygenerować hash w wariancie $2a$?

0

Używaj zawsze tego samego algorytmu to dostaniesz to samo. Jeśli hashujesz phpem to sprawdzaj phpem.

0

OK, czyli robimy tak:

1 . Użytkownik zakłada konto w serwisie.
2 . Konto jest hashowane w PHP za pomocą BF w wariancie $2y$.
3 . Następnie hasło wraz z innymi danymi zapisywane jest w bazie danych PostgreSQL właśnie w takim formacie (za pomocą Inserta).
4 . Do weryfikacji używam porównania hasła wyciągniętego z bazy oraz świeżo zahashowanego hasła, które poda użytkownik?

Dobrze rozumiem?

0

nowy hash https://www.php.net/manual/en/function.password-hash.php
porównanie https://www.php.net/manual/en/function.password-verify.php

używaj algorytmu argon2id a co najmniej bcrypra

0

Hash rób ZAWSZE po stronie aplikacji. Powód jest bardzo prosty, jeśli okaże się, że implementacja funkcji hashującej jest zła (np. podatna na ataki czasowe) to zdecydowanie łatwiej jest zaktualizować aplikację niż serwer DB.

0

Jak nie planujesz ataku na pentagon, nsa nie będzie tego łamać tęczowymi tablicami to pewnie wystarczy ci sha 256/512 ;)

0

@czysteskarpety: po co stosować stare hashe skoro jedną prostą metodą można użyć bcrypra albo argona?

0

OPie, a czemu Ty chcesz cokolwiek porównywać w DB? Pobierasz użytkownika i porównujesz hasła używając password_verify. Funkcja password_hash za każdym razem zwróci Ci inny wynik, bo automatycznie soli hasło.

0
hauleth napisał(a):

OPie, a czemu Ty chcesz cokolwiek porównywać w DB? Pobierasz użytkownika i porównujesz hasła używając password_verify. Funkcja password_hash za każdym razem zwróci Ci inny wynik, bo automatycznie soli hasło.

Uczę się dopiero, także chcę poznać prawidłową drogę działania od razu, żeby zminimalizować ilość błędów na przyszłość :)

Teraz już rozumiem ten mechanizm. Zamiast ponownie hashować hasło do weryfikacji, to przepuszczam gotowy pierwotny hash z podanym hasłem przez funkcję password_verify().

1 użytkowników online, w tym zalogowanych: 0, gości: 1