2009-11-17 18 views
27

Parolayı şifrelemek için sha256 kullanıyorum. Sha256 şifreli şifreyi mysql olarak kaydedebilirim. Ama aynı maddeyle giriş yapamıyorum.Php5.3.0'da nasıl sha256 kullanılır

Kod ekleme:

<?php 
error_reporting(E_ALL^E_NOTICE); 
$username = $_POST['uusername']; 
$passcode = $_POST['ppasscode']; 
$userflag = $_POST['uuserflag']; 
//$passcodeen = hash('sha256',$passcode); 
$passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode)); 
$conn = mysql_connect("localhost","charles","charles") or die("connection failed with DB:".mysql_error()); 
mysql_select_db("sessiondb"); 
$query = "INSERT INTO users(username,passcode,userflag) values('$username','$passcodeen','$userflag')"; 

seç kodu: yanlış bir şey

<?php 
error_reporting(E_ALL^E_NOTICE); 

    @mysql_connect("localhost","charles","charles") or die("Connection failed".mysql_error()); 
    @mysql_select_db("sessiondb") or die("Database doesn't exist".mysql_error()); 
    //get user input 
    $username = $_POST['username']; 
    $ppasscode = $_POST['ppasscode']; 
    //$passcodeen = hash('sha256', $ppasscode); 
    $passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode)); 
    //get session value from mysql 
    $query = @mysql_query("select username, userflag from users where username ='$username' and passcode = '$passcodeen'") or die("Query execution failed".mysql_error()); 

var mı? Kafam çok karışık. Teşekkürler.

+2

Parolayı kaydetmek için bir VARCHAR alanı kullanıyor musunuz? Varchars'taki maksimum boyut 255 karakter olduğundan ... – davethegr8

+0

Veritabanında saklı gibi bir kod örneğinde olduğu gibi karma bir örnek gönderir misiniz? –

+1

sha256 için, en az 64 karakterden oluşan bir VARCHAR'a ihtiyacınız var. –

cevap

40

Bu bir yazım hatası olabilir mi?

$_POST['ppasscode']; 

Emin yapacak (? Iki Ps ppasscode içinde, amaçlanan) ve yapın:

print_r($_POST); 

ve veri orada doğru olduğundan emin olun ve daha sonra nasıl görünmesi gerektiği dışarı yankı:

echo hash('sha256', $_POST['ppasscode']); 

Bu çıkışı veritabanında sahip olduğunuzla karşılaştırın (el ile). Bunu yaparak başarısız olduğunuz olası puan keşfederken:

  1. şifre ikisinin
  2. saklanan şifre
  3. karşılaştırma karma formu
  4. gelen şifreyi alınıyor.
+0

@jeremy, Teşekkürler, evet, 'ppasscode' amaçlanmıştır. –

+0

Tuz nasıl kullanılır? Giriş doğrulama ile ilgili öneri için – mofidul

11

Her şeyden önce, sha256 bir şifreleme türü değil, bir karma algoritmadır. Bir şifreleme, bilgiyi orijinal değerine geri çekmenin bir yolunu gerektirir (çarpışmalar bir kenara).

Kodunuza bakarak, doğru parametreyi sağlamanız işe yarayacak gibi görünüyor.

  • ilk kodunuzda değişmez bir dize kullanmayı deneyin ve kullanmanın geçerliliğini yerine doğrulamak $_POST[] değişken

  • verilen için karma (kod veritabanı sorgusu karşılaştırma hareketli olsun deneyin kullanıcı ve sadece hesapladık karma karşılaştırmak)

Ama en önemlisi kamu moda her türlü bu dağıtmadan önce, cihazın girişleri sterilize unutmayın. Rasgele SQL'in sorgulara eklenmesine izin verme. En iyi fikir, parametreli sorgular kullanmak olacaktır. denetlerken aynı zamanda,

https://github.com/ircmaxell/password_compat

Lütfen ve:

+1

+1. Parametreli sorgular çok az ekstra kodlama için çok fazla kontrol sağlar. –

+0

@Yannick, İyi tavsiyeniz için teşekkürler. –

1

Sen güvence şifreleri

-1

daha iyi bir çözüm Anthony Ferrara mükemmel uyumluluk komut dosyası kullanmaktır bir yolu için http://en.wikipedia.org/wiki/Bcrypt gibi Adaptif karma kullanmalıdır Parola, gerektiğinde karma güncelleştirmesi için her zaman bir yol ekler (tercih edilen uyumsuzluk, bu nedenle zamanlama saldırıları için denetim işlemini etkilemez).

İlgili konular