2016-11-28 115 views
0

我的客戶忘記了密碼登錄到其他開發商拒絕幫助開發的網站後端。因此,我去了SQL數據庫,看看我是否可以直接從那裏檢索密碼,但似乎密碼是加密的。見下面PHP Salt密碼加密

3a0606b25e75eb6c1fed61886844832e

,如果我知道密碼的加密方式,這樣我可以只加密新密碼,並添加到SQL,但它會更容易些,當我看着代碼(在密碼更改PHP gile)有一些名爲salt_pass的加密本網站的密碼。請參見下面的代碼:

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
$db = new database(); 
$option_uw = array(
    "table" => "users", 
    "fields" => "password", 
    "condition" => "id='{$_POST['id']}'" 
); 
$query_uw = $db->select($option_uw); 
$rs_uw = $db->get($query_uw); 
if ($rs_uw['password'] == trim(salt_pass($_POST['oldpassword']))) { 
    $value_pw = array(
     "password" => trim(salt_pass($_POST['pass'])) 
    ); 
    $query_pw = $db->update("users", $value_pw, "id='{$_POST['id']}'"); 

    if ($query_pw == TRUE) { 
     header("location:" . $baseUrl . "/back/user"); 
    } 
}else{ 
    $_SESSION[_ss . 'msg_result'] = TRUE; 
    header("location:" . $baseUrl . "/back/user/changepassword"); 
} 
mysql_close(); 
} 

這裏是salt_pass功能

function salt_pass($pass) { 
    return md5("supapongherb.com" . $pass); 
} 

有誰知道我可以根據這個代碼再生或加密新密碼?

PS。該網站是與MVC編程開發,我真的有能力。請讓我知道如果你想看到更多的文件。

預先感謝您!

+2

看看'insert'語法,你應該能夠弄清楚密碼是如何生成的。它可能被散列,你不能去散列它,因爲哈希不是加密的,它只能以一種方式。 – chris85

+0

我剛發現這個功能,我不知道下一步該怎麼做。 ($ pass){ return md5(「supapongherb.com」。$ pass); } – scottymorg

+0

現在你可以生成一個新的密碼,因爲你知道(過時的)哈希算法和使用的鹽。你甚至不需要做PHP。 '更新用戶設置密碼= md5(concate(「supapongherb.com」,'NEWPASSWORD'))其中userid = ??'。類似的東西 – chris85

回答

5

讓我們澄清一些事情

但似乎密碼是加密

首先,你的密碼是哈希,沒有加密。 There is a difference。即哈希值是單向的。沒有辦法查看散列,只需從中重新生成密碼。

其次,他們正在使用MD5。它們實際上並不會醃製任何東西,而是將相同的字符串附加到所有密碼上,然後對其進行哈希處理。 MD5是terrible way to hash because it's stupid easy to break。這相當於用橡皮筋固定您的前門。這是不安全的,因爲您可以每分鐘做百萬次猜測。是的,這是不好的。

第三,功能和「鹽」之稱,你可以很容易使一個新的密碼,這種方式(通過SQL,因爲我不是在猜想他們正在使用的有什麼樣的扭曲的ORM)

UPDATE users 
SET password = MD5(CONCAT('supapongherb.com', 'new_password_here')) 
WHERE id = their_user_id_here 

四,切換到password_hash。像現在。擺脫橡皮筋,並升級成死角,背後有狂暴的鬥牛犬,還有一個獵槍在你的腿上。