我正在嘗試創建一個安全的自定義用戶登錄系統,但它目前不起作用。這個想法是用一個安全的,加密的密碼創建一個用戶。但是,使用正確的密碼時,它不會登錄到該網站。爲什麼我的散列/鹽技術存儲密碼不起作用?
$6$j7Rd68RhKNx.6ccH$9lvRDdks.jx4hk7.YQ0hpvzPE22h/BZQ/9yXiwTMBV1Kx2xr2gbIZZJxYjeLrA41nL2WGjmt.FMQi877uOXrP1
相關函數:
// function register_user()
function bruger_opret_siden(){
if ($stmt = $this->mysqli->prepare('SELECT NULL FROM `bruger` WHERE `brugernavn` = ?'))
{
$stmt->bind_param('s', $brugernavn);
$brugernavn = $_POST["brugernavn"];
$stmt->execute();
$stmt->store_result();
$count = $stmt->num_rows;
$stmt->close();
if($count > 0)
{
$user_found = 1;
}
}
if(!isset($user_found))
{
//Check if the user exists.
if(!isset($errors))
{
$pb = null;
include 'function/class.upload.php';
$handle = new Upload($_FILES["file"]);
if($handle->uploaded)
{
//trims to next request
}
$password = $_POST["pass"];
$algorithm = '$6$'; //<--- This means the SHA 512
$salt = $this->generateSalt(16); //<--- SHA 512 uses a 16-character salt
$hash = crypt($password, $algorithm . $salt);
if ($stmt = $this->mysqli->prepare('INSERT INTO `bruger`
(`rank`, `email`, `brugernavn`, `password`, `profilbillede`, `profilbillede_godkendt`, `navn`, `efternavn`, `alder_d`, `alder_m`, `alder_aar`, `status`, `kon`, `seksualitet`, `land_by`, `hojde`)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'))
{
$stmt->bind_param('issssisssssiiisi', $rank, $email, $brugernavn, $password, $profilbillede, $pb_godkendt, $navn, $efternavn, $alder_d, $alder_m, $alder_aar, $kon, $seksualitet, $partnerstatus, $land_by, $hojde);
$rank = '1';
$pb_godkendt = '1';
$email = $_POST["email"];
$brugernavn = $_POST["brugernavn"];//C
$password = $hash;//C
$profilbillede = $pb;//C
$navn = $_POST["navn"];
$efternavn = $_POST["efternavn"];
$alder_d = $_POST["alder_d"];
$alder_m = $_POST["alder_m"];
$alder_aar = $_POST["alder_aar"];
$kon = $_POST["kon"];
$seksualitet = $_POST["seksualitet"];
$partnerstatus = $_POST["partnerstatus"];
$land_by = $_POST["land_by"];
$hojde = $_POST["hojde"];
$stmt->execute();
$stmt->close();
echo "ok";
}
else
{
// There was an error
echo 'error: ' . $mysqli->error;
}
}
}
else
{
echo "<li id=\"check_not\">Dette brugernavn er optaget!!</li>";
}
}
代碼,以使從所述密碼和鹽散列來註冊用戶:
function generateSalt($length) {
$alphabet = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$alphabet_length = strlen($alphabet);
$salt = '';
for ($i = 0; $i < $length; $i++) {
$salt .= $alphabet[rand(0, $alphabet_length - 1)];
}
return $salt;
}
使用密碼
123456789jp
時
輸出
兩個函數來顯示你sers信息。
$pass = $mebe->generateSalt();
$users = $mebe->bruger_opret_siden();
以下函數包含該問題;它不會登錄用戶。雖然沒有產生錯誤,但它不起作用。因爲我不能完全掌握你的代碼由於語言差異
<?php
/*
* // Grant the administrative privilige to show the content.
* Giver admin adgang til se indhold på siden.
*/
if(isset($_SESSION["rank"]) && $_SESSION["rank"] > 0) {
$bruger = $mebe->brugerindhold_side();
}
/*
* // Grant normal access to the page.
* Hvis ingen af dem så få de bare adgang sådan her..
*/
else{
?>
<form name="login" method="post" action="#">
<h1>Log ind</h1>
<p>Brugernavn</p><input type="text" name="brugernavn"/>
<p>Password</p><input type="password" name="pass"/>
<br />
<input type="submit" name="Log_ind" value="Log ind" id="login">
<?php
if(isset($_POST["Log_ind"]))
{
$login = $mebe->godkendt_login();
}
?>
</form>
<?php
}
?>
它的工作原理是更簡單的方法:) –
現在你的問題解決了嗎?這似乎是**代碼的問題,但我不確定它是否解決了您的問題。 – Digitalis
另外,我懷疑你會守護關於外星人生活的信息,因爲那是一個密碼! ;) – Digitalis