2013-04-07 101 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

祝你好运,并在一天结束时停止试图推出自己的“加密/哈希”算法/方法/灾难。这样做可能会让您的客户易受攻击。