2013-03-15 7 views
6

Czy ktoś może mi pokazać lub wyjaśnić, jak mogę wprowadzić hasło do bazy danych w formacie md5? nawet jeśli możesz wskazać mi właściwy kierunek lub coś, co byłbym wdzięczny, ponieważ jestem nowy dla mysql dzięki.wstawić hasło do bazy danych w formacie md5?

$query="INSERT INTO ptb_users (id, 
user_id, 
first_name, 
last_name, 
email) 
VALUES('NULL', 
'NULL', 
'".$firstname."', 
'".$lastname."', 
'".$email."', 
'".$password."' 
)"; 
mysql_query($query) or dieerr(); 
$result = mysql_query("UPDATE ptb_users SET ptb_users.user_id=ptb_users.id"); 
+4

nie tylko md5 go, użyj lepszej funkcji lub co najmniej soli i md5 –

+1

1.Nie używaj md5 do przechowywania haseł 2. Funkcje mysql_ * są pomijane. –

+0

Dokumenty są przydatne tutaj: http://www.php.net/manual/en/function.md5.php, również https: //dev.mysql. com/doc/refman/5.5/en/encryption-functions.html, ale powinieneś _nie_ używać md5. Nie jest już wystarczająco silny. Co najmniej sha512 jest preferowany, ale przeczytaj długą odpowiedź połączoną poniżej. –

Odpowiedz

7

użycie MD5,

$query="INSERT INTO ptb_users (id, 
user_id, 
first_name, 
last_name, 
email) 
VALUES('NULL', 
'NULL', 
'".$firstname."', 
'".$lastname."', 
'".$email."', 
MD5('".$password."') 
)"; 

ale MD5 jest niepewna. Użyj SHA2.

+1

Proponuję użyć 'SHA512', ponieważ' MD5' jest niepewny ... –

+1

Żaden z nich nie jest odpowiedni do mieszania haseł, ale jeśli używasz ich, używaj soli. Hasła powinny być przechowywane w haszowaniu za pomocą dedykowanych algorytmów takich jak bcrypt. – Mchl

3

Nie używaj MD5 jak to jest niebezpieczne. Polecam przy użyciu SHA lub bcrypt z salt:

SHA256('".$password."') 

http://en.wikipedia.org/wiki/Salt_(cryptography)

+0

@Dvvovator - proszę o komentarz? –

+0

To nie moja sprawa, ale naprawdę nie powinieneś używać sha256, powinieneś użyć wbudowanych funkcji 'password_hash()' i 'password_verify()'. – GrumpyCrouton

0

jeśli chcesz użyć md5 encryptioon można to zrobić w skrypcie php

$pass = $_GET['pass']; 

$newPass = md5($pass) 

a następnie włóż ją do baza danych w ten sposób, jednak MD5 jest jednokierunkową metodą szyfrowania i prawie nie da się odszyfrować bez trudności.

0

Możesz użyć MD5() w mysql lub md5() w php. Aby użyć soli, dodaj ją do hasła przed uruchomieniem md5, f.e .:

$salt ='my_string'; 
$hash = md5($salt . $password); 

Lepiej używać różnych soli dla każdego hasła. W tym celu musisz zapisać swoją sól w db (a także hash). Podczas uwierzytelniania użytkownik wyśle ​​swój login i hasło. Znajdziecie jego hash i sól w db i dowiedzieć się:

if ($hash == md5($salt . $_POST['password'])) {} 
1

Darren Davies jest częściowo rację mówiąc, że należy użyć soli - istnieje kilka problemów z jego twierdzeniem, że MD5 jest niepewna.

Powiedziałeś, że musisz wprowadzić hasło przy użyciu skrótu Md5, ale to tak naprawdę nie mówi nam dlaczego. Czy to dlatego, że jest to format używany podczas sprawdzania hasła? Czy masz kontrolę nad kodem, który potwierdza hasło?

Rzecz w korzystaniu z soli polega na tym, że unika problemu, w którym 2 użytkowników ma to samo hasło - będą również mieli ten sam skrót - nie jest to pożądany wynik. Używając różnej soli dla każdego hasła, to nie powstaje (przy bardzo dużych wolumenach danych nadal istnieje ryzyko kolizji wynikających z 2 różnych haseł - ale na razie to zignorujemy).

Więc można Aither wygenerować losowy wartość dla soli i przechowywać że zbyt w rekordzie, czy można korzystać z niektórych danych, które już posiadają - takich jak nazwa użytkownika:

$query="INSERT INTO ptb_users (id, 
     user_id, 
     first_name, 
     last_name, 
     email) 
     VALUES('NULL', 
     'NULL', 
     '".$firstname."', 
     '".$lastname."', 
     '".$email."', 
     MD5('"$user_id.$password."') 
     )"; 

(jestem zakładając, że poprawnie udało ci się uciec wszystkie te struny wcześniej w twoim kodzie)

Powiązane problemy