v2.5.2
Giriş yap

Bcrypt ile giriş yapma

mrcrazy
748 defa görüntülendi

Bcrypt ile giriş yapma!

Herkese merhabalar saygı değer hocalarım,
Ben bir siteye e-ticaret ile alakalı bir panel kurdum fakat temalarını ve gerekli özelliklerini beğenmediğim için kendim yazmaya karar verdim.
bu e ticaret sistesinde bir kullanıcı ekleyince alltaki gbi şifreliyor, bende kendi panelimde bu panelin şifrelemesine göre giriş yaptırmam gerekiyor ne yaparsam yapayım çözemedim yardımcı olurmusunuz acaba ?
Saatlerdir denedim ama bi türlü yapamadım, yardımcı olursanız sevinirim.
Not : daha acemiyim, ona göre yardımcı olursanız sevinirim.

<?php
session_start();
include 'db.php';

if (isset($_POST['girisyap'])) {
	
$email=htmlspecialchars($_POST['email']);
$password=htmlspecialchars($_POST['password']);
$passwordguclu=password_hash("sha256", $password, PASSWORD_DEFAULT);



$tblclientssor=$baglanti->prepare("SELECT * from tblclients where email=:email and password=:password");
$tblclientssor->execute(array(
'email'=>$email,
'password'=>$passwordguclu

));

$var=$tblclientssor->rowCount();

if ($var >0) {
	$_SESSION['girisbelgesi']=$email;
	Header("Location: index.php?durum=welcome");

}
else {
	Header ("Location: login.php?durum=hata");

}

}
Cevap yaz
Cevaplar (4)
remzikocak
1332 gün önce

Öncelikle password_hash fonksiyonunu hatali kullaniyorsunuz. Asagidaki örnek'de iki farkli alogritma yazdim. Oradan parametrelere bakabilirsiniz.

$password = '123456';
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);

// veya burada daha güclü Argon2 sifrelemeyi kullanabilirsiniz. PASSWORD_ARGON2ID, PHP 7.4 ve üzeri sürümlerde calisir.
$hashedPassword = password_hash($password, PASSWORD_ARGON2ID, [
  'memory_cost' => 2048,
  'time_cost'   => 4,
  'threads'     => 3,
]);

// Veri tabanindan üyeyi cekmek icin sadece kullanici adi'ni kullanin

if(password_verify($password, $hashedPassword))
{
  	echo 'gecerli sifre';
} else {
 	echo 'gecersiz sifre'; 
}

Sizin kodunuza entegre edecek olursak su sekilde deneyebilirsiniz

session_start();
include 'db.php';

if (isset($_POST['girisyap'])) {
	
  $email = htmlspecialchars($_POST['email']);
  $password = htmlspecialchars($_POST['password']);
  
  // bu kodu kayit esnasinda sifreyi kayit ederken kullanacaksiniz. 
  //$passwordguclu = password_hash($password, PASSWORD_DEFAULT);

  $tblclientssor = $baglanti->prepare("SELECT * from tblclients where email=:email");
  $tblclientssor->execute(array(
      'email' => $email,
  ));
  $user = $tblclientssor->fetch(PDO::FETCH_ASSOC);

  if ($tblclientssor->rowCount() && password_verify($password, $user['password'])) {
      $_SESSION['girisbelgesi']=$email;
      Header("Location: index.php?durum=welcome");

  } else {
      Header ("Location: login.php?durum=hata");

  }

}
thomasshelby
1339 gün önce

password_hash sürekli random salt kullandığı için veritabanından farkı bir değer üretecektir. Kullanıcı adı ve parola ile kullanıcıyı çekemezsin. O yüzden giriş yaparken sadece username ile veri çekmelisin.
Daha sonra password_verify ile postalanan şifre ile database'ten gelen hash'i doğrulatmalısın.

mrcrazy
1339 gün önce

@qplot hocam denedim fakat halen hata veriyor, whmcs yazılımından alıp kendi php panelime entegre etmeye çalışıyorum fakat bir türlü yapamadım sorun oydu, büyük bi ihtimal whmcs'yi çıkarıp full kendim yazıcam gibime geliyor

qplot
1339 gün önce

öncelıkle

bu kodlamada mısal 12345 şifresı verı tabanında 465a4da56s4da654d6a5s4da6sd4a6sd4a6s45d gibi saklanır

senın sıfrelemende 12345 şifresi misal 6+5445644465 tarzında verı tabanında tutuluyordur ( tabı sıfrelıyorsan )

ondan oturu uyusmadıgından gırıs yapamazsın

yapacagın sey şu senın varolan sıfrelemenı ve sıfrenı sıleceksın

$password="12345";

echo $passwordguclu=password_hash("sha256", $password, PASSWORD_DEFAULT);

burada cıkan sonucu verı tabanına yazacaksın sonra gırıs yapmayı deneyeceksin ki sunucu unutma

buda senın panelınde olmalı $passwordguclu=password_hash("sha256", $password, PASSWORD_DEFAULT);