2013-04-07 103 views
-1

我正在開發使用Codeigniter的系統! 我想知道的是,如果有人知道密碼是什麼,如果他知道我用來生成加密哈希的功能和步驟? 現在我必須生成我散列字符串是:解密密碼,如果我知道加密功能

$pass = str_split($password, 2); 
$hashPass = ''; 
foreach($pass as $p){ 
    $hashPass .= md5($p); 
} 
+4

我不確定你在這裏做什麼。您似乎只是將密碼的每個字符再次添加到字符串中? – 2013-04-07 08:13:08

+0

是的,Pekka,有人擁有$ pass價值,他可以在知道這個哈希過程的情況下解密哈希值嗎? – goseo 2013-04-07 08:14:45

+0

用一個體面的密碼哈希來恢復密碼的唯一方法是猜測。一個好的密碼哈希使猜測代價高昂。請參閱[如何安全地哈希密碼? on security.stackexchange](http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords)以獲取密碼散列的介紹。你的計劃從良好的光年。 – CodesInChaos 2013-04-07 08:15:06

回答

0

如果他們知道的加密的實際方法,他們有一個easiert的時間來修改它。

對於所有哈希,例如存在rainbow tables,其允許快速恢復密碼。這就是爲什麼散列密碼通常會被鹽漬化的原因。

str_split另一方面不是散列函數,據我所知。

1

你的散列方法不是散列和​​它非常糟糕的想法..你必須散列你的密碼字符串!

這裏是2種非常簡單功能的..

function hash_my_pass($password){ 
    return generate_hash($password); 
} 

function generate_hash($password){ 
    return hash('sha256', $password . substr($password, 1, 3)); 
    # In this case I put to hash $password + some substr of the password.. 
    # Its good when you hash pass to add something secret.. 
} 

function check_password($password, $hashed_pass){ 
    return generate_hash($password) == $hashed_pass; 
} 

$password = '123456789'; 
$hash = hash_my_pass($password);  
echo $hash;#this hash you must keep at your DB. 
#when user login just compare his pass with the hash from your DB 
var_dump(check_password($password, $hash)); 
+0

+ +1列表的哈希替代品:) – scones 2013-04-07 08:35:40

+1

-1爲舊的,out-of-日期和輕鬆黑客哈希替代品。 – jmadsen 2013-04-07 13:03:12

+0

@jmadsen我寫的這些都是非常簡單的哈希函數.. – Svetoslav 2013-04-07 15:44:50

1

老實說,如果您在2013年未使用Bcrypt,那麼密碼將會受到攻擊。在「加密」方面,如果您有任何等級的話,那麼您目前的成績還是很低的。

我用笨與Bcrypt本class

然後,所有你需要做的就是調用這個文件bcrypt.php然後在類名是:

class Bcrypt extends CI_Controller {............} 

但請記住用PHP 5.5 >將支持新的密碼散列函數,它將自動使用Bcrypt,直到出現更強大的方法。 Info here

祝你好運,並在一天結束時停止試圖推出自己的「加密/哈希」算法/方法/災難。這樣做可能會讓您的客戶易受攻擊。