2011-01-30 22 views
14

Bu sorguyu döndürdü null.MySQL MD5 SELECT

SELECT `email`, `password`, `salt` FROM `users` WHERE `password` = md5(`salt`+md5('123123'+`salt`)+'123123') AND `email` = '[email protected]' 

aşağıdaki sorgu 'd2b4312db21705dafd96df14f8525fef' döndü, ama neden?

SELECT md5('Vwm' + md5('123123' + 'Vwm') + '123123') 

Bu kod '422ad0c19a38ea88f4db5e1fecaaa920' döndü.

Kullanıcı yetkilendirmesi yapın. Veritabanına nasıl bir sorgu oluşturabilirim ki ilk önce SALT ve SALT bu MD5 işlevini yaptım mı?

+2

Sadece küçük bir kafa, hatta (çift) tuzlama ile bile daha güvenli olduğu için sha1 kullanmak daha iyi olacaktır. Sha1'i kullanmak, komut dosyanızı geleceğe daha dayanıklı hale getirecek! – gnur

cevap

31
SELECT md5(CONCAT('Vwm', md5(CONCAT('123123', 'Vwm')), '123123')) ; 

Dizeleri uydurun() ve daha sonra md5() öğesini çalıştırmalısınız.

o PHP komut dosyası olarak doğru aynı değeri döndürür Bu şekilde: MySQL

+--------------------------------------------------------------+ 
| md5(CONCAT('Vwm', md5(CONCAT('123123', 'Vwm')), '123123')) | 
+--------------------------------------------------------------+ 
| 422ad0c19a38ea88f4db5e1fecaaa920        | 
+--------------------------------------------------------------+ 
2
  • tuz Senaryonuzun olmalıdır
  • veritabanınızda
  • tuzlu şifre
  • senaryonuz aynı olsa sorun dikkate şifresini tuzlama ve db tuzlu versiyonu ile
  • karşılaştırmak edilir
+0

Her kullanıcının kendi tuzuna sahip olmasına ihtiyacım var – Isis

11

String birleştirme CONCAT kullanarak gerektirir() `. Bu;

md5('123123' + 'Vwm') 

aslında bir dizeye bir numara ekliyor: Aynı dize karma değiliz olarak

mysql> select '12123' + 'Vwm'; 
+-----------------+ 
| '12123' + 'Vwm' | 
+-----------------+ 
|   12123 | 
+-----------------+ 

Yani sorgu PHP tarafında aynı değildir.