2012-04-01 41 views
1

是否哈希处理使之更安全时使用两次密码?我的例子是在CodeIgniter中,我把它分解到最低限度。请不要指出这个例子中的所有错误,这只是一个例子。散列时使用密码两次使它更安全吗?

<?php 
function user_signup(){ // The normal way 
    $this->load->database(); 
$new_user_insert = array(
    'password' => sha1($salt . $this->input->post('password'))); 

} 
function user_signup(){ // The double insert way 
    $this->load->database(); 
$new_user_insert = array(
    'password' => sha1($this->input->post('password') . $salt . $this->input->post('password'))); 

} 
} 

编辑: 我的想法是,它将使在放长一倍,一个例子(用户名:joe,密码:123456789)。因此,与其有我的哈希123456789彩虹表,这将是123456789123456789。我知道这是一个过于简单,和哈希看起来更像01a967f5d27b9e910754729a669504a60d2aa865,但将是黑客将需要更大的彩虹table.Please纠正我,如果我错了。

预先感谢您。

+0

”两次插入密码是否安全? - 取决于你插入它的位置。 :) – 2012-04-01 03:08:14

+2

没有。事实上,保证密码安全的最好方法是永远不要记录它! ;) – zombat 2012-04-01 03:11:17

+2

@zombat:他没有记录它,只是一个密码单向散列。加盐。实际上,这是非常好的做法。 – 2012-04-01 03:29:20

回答

3

一个是黑客将需要更大的彩虹表

这是不是这样的。

为简单起见,假设您的密码必须是4位数字。 (当然,这可以推广到更复杂的密码。)然后有10,000个可能的密码。如果与自身串联密码生成一个18位的数字,攻击者可以从前三推断的第二次九个位数:1234salt1234是可能有效,但1234salt4321不能,也不会被包含在彩虹表。 附加数字,带来已知信息的功能,不会增加额外的复杂性。

将一个用户特定的 salt添加到密码中作为哈希防御攻击者可以获取密码哈希值以及谁知道系统。特别是,攻击者知道散列用户密码的算法。假设为四个字符的数字密码之前,这样使用蛮力的策略仍然需要攻击者尝试只有10,000组合(0000salt0000,0001salt0001,...,9999salt9999)。最初的策略(不要将密码与自己串联)还需要10,000个组合(0000salt,...,9999盐),所以不会更难(实际意图)。 “

+0

谢谢,我在思考了一段时间后得出了同样的结论。你是唯一回答我的问题的人。 – 2012-04-01 17:14:29

0

一般来说,没有。输入密码两次对于检查用户是否正确输入密码非常有用,但对数据库中的密码没有任何用处。

0

第二次输入密码的目的只是为了确保用户没有输入错误!它本身实际上并没有提高安全性,当然,在数据库中存储两次也没有多大的收获。

这是为了避免错别字。如果你不得不输入密码两次,机会就是你想要的密码。他们想避免让 密码为“blah”的人稍后必须检索其密码 ,因为他们错误地键入了“blaj”。特别是 ,因为密码字段显示为星号(*********),有时候它很难说明是否键入了你认为输入的内容 - 人们很可能在没有意识到的情况下发生拼写错误( ) 。有些网站做 也与电子邮件地址时,至关重要的是,作为 以及正确的。如果攻击者知道你对散列密码策略

why enter password 2 times?

+1

他的代码不会提示用户两次。 – 2012-04-01 03:30:14

相关问题