我有一个加密方法,它的行为如下:密码的每个字符都经过一个方法,该方法获取该字符的ASCII值,并将字节向一边移位,然后向另一边移位,并返回以下内容:
$shifted_left.$original_char.$shifted_right。
以下是对密码进行哈希处理之前的密码示例:
àp8Âa0æs9æs9îw;Þo7är9Èd2Îg3Þo7Êe2æs9Ðh4Êe2är9Êe2d2
在此之后,通过原始密码中的每个字符形成的结果字符串将使用BCrypt进行散列。用这些垃圾字符包围密码是提高了密码的强度,还是保护它们不会通过彩虹表/字典攻击而被破解?
发布于 2012-07-12 15:04:58
一般来说,它确实可以防止预先计算的彩虹表,因为你有一个相当独特的算法,可能没有人费心为它创建彩虹表。
但是,相同的密码仍然散列为相同的散列。因此,试图暴力破解所有密码散列的攻击者会更容易,因为他只需要为所有用户破解一次相同的密码。
因此,仍然建议您使用特定于用户的盐。如果你正在使用一个已经很强的散列算法的特定于用户的盐,那么你是否也进行位移位并不重要。
发布于 2012-07-12 15:50:11
如果攻击者能够控制数据库和代码,则添加加扰字符将毫无帮助(只是可以忽略不计的操作)。如果他只有没有代码注入(SQL-)的数据库,那么他将识别bcrypt散列,并且现在可以使用bcrypt暴力破解,但是由于混乱,没有任何弱密码。就像加密后的文本就是破解密码,所以字典是没有用的。
这是模糊的安全性,但只要代码未知,它就是有效的。在将bcrypt与唯一的盐一起使用之前,您可以通过添加固定的硬编码盐(密钥)来更容易地获得相同的效果。
备注:在bcrypt中使用的独特的盐将有助于防止彩虹表,而不是扰乱您的密码。一个大的彩虹表也可以包含随机的组合,比如你的乱密码。
https://stackoverflow.com/questions/11446491
复制相似问题