2013-04-05 291 views
2

我想使用一些特殊的SHA256加密和連接它的mysql數據庫爲我的網站創建登錄腳本。 (和一種形式的課程:P)使用SHA256的PHP登錄腳本

我使用Minecraft插件「Authme」進行註冊。它在SHA256中密碼並將其存儲到mysql數據庫中。但代碼$SHA$ce9b7692bd2b8f79$644c2a5710bb93f82471d08234435d7d02b1bbc09aff2cf23370f187aab37716 與我從某些網站製作的SHA256哈希表不一樣。 4aae7aba013ffed685a1354a0ebb576b8f1f58997b96cf3ef096282cfe737bff

Authme的開發人員給了我一個「簡單」代碼來解密密碼,但我不知道如何將它放在我的腳本中。

// @return true if password and nickname match 
function check_password_db($nickname,$password) { 
    // Here u have to include your DB connection and select! 
    $a=mysql_query("SELECT password FROM authme where username = '$nickname'"); 
    if(mysql_num_rows($a) == 1) { 
    $password_info=mysql_fetch_array($a); 
    $sha_info = explode("$",$password_info[0]); 
    } else 
    return false; 
    if($sha_info[1] === "SHA") { 
    $salt = $sha_info[2]; 
    $sha256_password = hash('sha256', $password); 
    $sha256_password .= $sha_info[2];; 
    if(strcasecmp(trim($sha_info[3]),hash('sha256', $sha256_password)) == 0) 
     return true; 
    else return false; 
    } 
} 

因此,底線是: 我想知道如何使通過檢查,如果他通過查看MySQL的數據輸入了正確的密碼登錄時,用戶在我的網站上填寫表單。如果你需要更多的信息,只需回覆,我會給你。我的目標是製作一個適用於會話的登錄腳本。

我擁有的表是ID,am_(用戶名),密碼和IP。

你能給我這樣的代碼嗎? (製作與用戶名和密碼的形式,看其是否有效或無效)

對不起,我的錯字的,我來自荷蘭..

+0

SHA256是不加密的,所以你不能解密。 – 2013-04-05 20:38:53

回答

2

那麼,據我所知:你使用一些庫進行註冊,現在你想做一個登錄表單,使用註冊使用相同的授權機制。

在這種情況下,您發佈了應該用於自己檢查密碼的代碼。只需將用戶輸入傳遞給它,並確保SELECT語句使用正確的表和列。

至於爲什麼散列不同,這是因爲用戶輸入不爲sha256(password)sha256(concat(sha256(password),salt))加密其中的concat是string concatenation操作和鹽是additional input,其在這種情況下等於$字符之間部分(在您的示例:ce9b7692bd2b8f79) 。

另外,你不能「解密」散列數據。你只能散列一些其他數據並比較兩個哈希來檢查它們是否相同。如果它們相同,則兩個輸入(可能)都是相同的。 (「可能」部分是因爲哈希函數是被拒絕的,而不是雙向的。)

0

如果你把簡單的密碼進入功能check_password_db它將檢查如果它等於存儲的sha256散列,那麼如果該函數返回true,則可以設置一個會話變量,指示用戶已成功登錄。

0

您提供的代碼爲您工作。您所要做的就是將用戶輸入的表單數據傳遞給提供的函數,並檢查其返回值以確定登錄詳細信息是否正確。

這裏是最簡單的用例和代碼來幫助你。

用戶導航到登錄頁面(登錄。HTML)

<!-- Login Page - login.html --> 
    <form name='login-form' action='login.php' method='POST'> 
    Username <input type='text' name='username' value=''></input> 
    Password <input type='password' name='password' value=''></input> 
    <input type='submit' value='Login' name='submit-button'></input> 
    </form> 

一旦用戶輸入登錄信息,並點擊「提交」,就應該到你的PHP腳本網頁

<?php 
/* Login Script - login.php */ 

//Enable Session 
session_start(); 
//Perform Form Submission Checks 

$un = $_POST['username']; 
$p = $_POST['password']; 

//Validate form input data using PHP and mysql best practices to avoid SQL injections and attacks 
//Connect to Database 

function check_password_db($nickname, $password) 
{ 
    /* Your Code Here */ 
} 

$return_var = check_password_db($un,$p); 

if($return_var == true) 
{ 
    //User entered valid data 
    $_SESSION['LOGIN'] = TRUE; 
    echo "Login Successful"; 
} 
else 
{ 
    //User entered invalid data 
    echo "Login Unsuccessful"; 
} 
?> 
+0

你好!感謝您的快速回復。你能否在腳本中包含我上面發佈的腳本?我已經做到了,但它所做的唯一的事情是把?sha256_password =放在我的網頁末尾。你能做出類似於它匹配的東西說「YAY!IT WORKS」或類似的東西嗎? – 2013-04-06 11:16:44

+0

我不明白你得到了什麼確切的輸出。確保你正在傳遞數據。如果必須使用echo語句進行調試。我爲你的代碼添加了一個佔位符,並且還爲你添加了echo/print語句。 – GeekByte 2013-04-08 16:53:35

+0

嘿!我已經做了你所說的一切,但是當我提交表格時,它說

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in MYDOMAIN on line 19
2013-04-12 14:52:25