我正在阅读保护密码的不同技术。我知道,无论你采取什么预防措施,从长远来看,你只会减缓一个坚定的黑客。我研究了 bcrypt 在 PHP 和 PBKDF2 中的使用。
现在忽略您如何创建哈希。如果一组说 4 个或更多随机选择的 ASCII 字符在预定位置输入到散列中,这会有什么用。有不同长度的哈希吗?因此,如果您只计算字符数,您可以让一种类型说 md5 看起来像另一种类型?
我知道这再次只会减慢知道您正在这样做的人的速度,并且他们会获得您用来放置随机字符的位置?
我正在阅读保护密码的不同技术。我知道,无论你采取什么预防措施,从长远来看,你只会减缓一个坚定的黑客。我研究了 bcrypt 在 PHP 和 PBKDF2 中的使用。
现在忽略您如何创建哈希。如果一组说 4 个或更多随机选择的 ASCII 字符在预定位置输入到散列中,这会有什么用。有不同长度的哈希吗?因此,如果您只计算字符数,您可以让一种类型说 md5 看起来像另一种类型?
我知道这再次只会减慢知道您正在这样做的人的速度,并且他们会获得您用来放置随机字符的位置?
在散列中放置随机字符以使其安全是没有意义的。因为最终您必须找到实际的哈希值并与根据用户输入计算生成的哈希值进行比较。
更好的是,为哈希使用种子。假设hash
是一个通用函数,并且$seed
是一个种子,你可以这样做,
$seed = 'a_constant_value';
$seeded_hash = hash( $seed . $password );
如果您不希望种子成为常量,请将用户的另一个凭据添加到哈希中。
$seed = 'a_constant_value';
$user_credential = 'any_data_of_this_user';
$seeded_hash = hash( $seed . $user_credential. $password );
在此确保此用户凭据对于每个用户都是不变的。它可以是用户的生日、血型。