解密密码,如果我知道加密功能
问题描述:
我正在开发使用Codeigniter的系统! 我想知道的是,如果有人知道密码是什么,如果他知道我用来生成加密哈希的功能和步骤? 现在我必须生成我散列字符串是:解密密码,如果我知道加密功能
$pass = str_split($password, 2);
$hashPass = '';
foreach($pass as $p){
$hashPass .= md5($p);
}
答
如果他们知道的加密的实际方法,他们有一个easiert的时间来修改它。
对于所有哈希,例如存在rainbow tables,其允许快速恢复密码。这就是为什么散列密码通常会被盐渍化的原因。
str_split
另一方面不是散列函数,据我所知。
答
你的散列方法不是散列和它非常糟糕的想法..你必须散列你的密码字符串!
这里是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));
我不确定你在这里做什么。您似乎只是将密码的每个字符再次添加到字符串中? – 2013-04-07 08:13:08
是的,Pekka,有人拥有$ pass价值,他可以在知道这个哈希过程的情况下解密哈希值吗? – goseo 2013-04-07 08:14:45
用一个体面的密码哈希来恢复密码的唯一方法是猜测。一个好的密码哈希使猜测代价高昂。请参阅[如何安全地哈希密码? on security.stackexchange](http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords)以获取密码散列的介绍。你的计划从良好的光年。 – CodesInChaos 2013-04-07 08:15:06