2012-07-12 73 views
3

我有以下行为的加密方法: 密码的每个字符都被通过获取字符的ASCII值,并且将这个字节的一种方式,然后其他的方式方法提出,并返回如下:PHP加密方法

$shifted_left.$original_char.$shifted_right

口令的一个例子之前,它被散列:

àp8Âa0æs9æs9îw;Þo7är9Èd2Îg3Þo7Êe2æs9Ðh4Êe2är9Êe2d2

在此之后,将所得的字符串从通过在原来的密码使用BCrypt被散列每个字符要形成。使用这些垃圾字符包围密码是否可以提高密码的强度或防止它们通过彩虹表/字典攻击被破解?

+0

据我所知,(SHA1 || SHA256)+盐非常强,目前推荐。 – Ron 2012-07-12 07:03:08

+0

@Ron不完全,特别是对于密码哈希,你需要一个* slow *算法,比如Blowfish。 SHA特别是一种快速算法,所以如果你使用它,你至少应该对它进行大幅扩展。 – deceze 2012-07-12 07:07:10

+2

如果有人知道这个“预散列”算法,他可以为你编写一个彩虹表。它是否提高了实力?是。它完全保护你吗?没有。 – Roman 2012-07-12 07:07:42

回答

3

一般来说,它确实会阻止预先计算彩虹表,因为您有一个相当独特的算法,可能没有人会为创建彩虹表而烦恼。

但是,相同的密码仍然哈希到相同的散列。因此,一个试图暴力破解所有密码哈希的攻击者有更容易的时间,因为他只需要为所有用户破解一次相同的密码。

因此,它仍然是非常可取的使用用户特定的盐。如果您使用的是具有强大哈希算法的用户特定盐,则您是否也可以进行位移跳舞并不重要。

+0

真正的..但是,自从被散列密码是不实际的密码,但混乱的字符串,并不意味着如果他们试图强力攻击,他们就无法真正破解任何的因为真正的密码没有存储的密码? – SHH 2012-07-12 07:10:59

+0

当攻击者破坏你的服务器(或者你的代码的任何地方)时,他/她知道你是如何构建你的散列字符串的。有没有神奇的,因此攻击者可以暴力破解哈希很快... – Ron 2012-07-12 07:16:52

+0

@SHH如果他们想尝试暴力破解你的数据,他们会需要反正知道你的特定算法。通过查看哈希算法使用的算法是不可能的。如果您的数据库受到损害,以致您的哈希值被泄漏,那么只需假定该算法已随其泄漏,因为攻击者可以访问您的服务器。 – deceze 2012-07-12 07:21:07

2

如果攻击者可以控制数据库和代码,那么添加乱码字符将毫无帮助(只有可忽略的操作更多)。如果他只有数据库而没有代码(SQL注入),那么他会识别bcrypt散列,现在可以用bcrypt强行推force,但由于加扰没有任何弱密码。这就像打乱的文本将是密码破解,所以字典是没有用的。

这是隐藏的安全,但会是有效的,只要密码不知道。在使用bcrypt和独特的盐之前,通过添加修正的硬编码盐(键),可以更轻松地获得相同的效果。

P.S. bcrypt中使用的独特盐将有助于防止彩虹表,而不是扰乱你的密码。一张大彩虹桌也可以包含随机组合,比如你的密码。