如何在数据库中存储密码2024 年 8 月 28 日 | 3 分钟阅读 大多数 Web 应用程序要求用户输入用户名和密码以验证其身份。它们会将用户提供的凭据与数据库中的信息进行比较,如果匹配,则授予用户访问权限。 明文存储密码根据 naked security 的统计,55% 的互联网用户在大多数网站上使用相同的密码!这表明,如果存储您密码的网站被盗,黑客将能够访问您在该网站上的账户,以及您使用相同密码登录的社交媒体、电子邮件、论坛和其他网站上的所有其他账户。 有许多技术可以增加黑客从数据库中检索密码的难度。尽管如此,开发人员仍然经常以明文形式存储密码,并且不遵守基本的最佳实践。超过 30% 的网站以明文形式存储密码(包括一些声誉良好的网站)。无论您选择多么强的密码,如果网站以明文形式存储它,您都不安全! 加密形式存储密码另一种可能性是,如果密码不能以明文形式存储,则应先加密再存储。此外,这是一个坏主意。加密函数提供输入和输出之间的一对一映射,并且总是可逆的。如果黑客获得了密钥,密码就可以被解密。 密码的加密函数使用单向加密哈希算法是更好的选择。哈希函数提供的多对一映射使得逆向输出几乎不可能。可靠的加密哈希函数会产生较少的冲突。由于鸽巢原理,冲突无法完全避免。在哈希密码时,我们可以假设哈希函数将产生唯一的结果,这意味着没有两个密码会产生相同的哈希值。 MD5 和 SHA1 是两个更知名的加密哈希方法。一种方法是将密码的哈希值而不是明文版本存储在数据库中。在将用户提供的密码与数据库中的哈希值进行比较之前,应用相同的哈希算法。如果两个哈希值匹配,则用户通过身份验证(因为相同输入的哈希值会产生相同的输出)。如果攻击者成功访问数据库,现在他们只能看到哈希后的输出,而看不到实际密码。 彩虹表黑客预先计算了许多单词(来自流行的单词列表或字典单词)的哈希值。他们制作了一个包含单词及其对应哈希值的表。这个表叫做彩虹表,可以在网上轻松获取。通过比较从数据库收到的哈希值,他们可以使用此表进行反向查找以找到真实的密码。因此,设置一个强密码非常重要,因为它降低了您的密码出现在单词列表中的可能性。 Salt 方法为了保护密码免受彩虹表的攻击,使用了加盐数据。Salt 是一些随机数据,添加到原始密码中,然后存储在数据库中以进行保护。例如,如果我们有一个密码 'hap123' 和 salt 'xcv69',那么存储的密码将是 'hap123xcv69'。 由于我们有固定的 salt 数据值,因此称为静态 salt 方法。由于静态数据,此方法也可能不安全,因此我们使用动态 salt 方法。 动态 Salt 方法在动态 salt 算法中,动态 salt 数据通过随机字符串生成器生成,并将静态 salt 数据与原始密码和动态 salt 一起添加。然后将其传递给哈希函数并存储在数据库中。在此方法中,黑客必须为每个用户创建一个新的哈希表,这增加了他们窃取密码的难度。 上述方法在阻止黑客方面效果很好。与 MD5/SHA1 算法相比,Bcrypt 和 scrypt 算法更受欢迎。bcrypt 是一种基于 blowfish 的哈希算法。您需要提供一个成本/工作因子。由于工作因子会减慢整个过程,因此生成哈希表需要更多时间。 |
我们请求您订阅我们的新闻通讯以获取最新更新。