当前位置: 首页 > 面试题库 >

哈希密码字段使用哪种数据类型以及什么长度?

龚鸿雪
2023-03-14
问题内容

我不确定密码哈希的工作原理(稍后将实现),但现在需要创建数据库架构。

我正在考虑将密码限制为4-20个字符,但是据我了解,加密哈希字符串后的长度将不同。

那么,如何将这些密码存储在数据库中呢?


问题答案:

更新:仅使用哈希函数不足以存储密码。您应该阅读Gilles在该主题上的答案,以获取更详细的解释。

对于密码,请使用增强密钥的哈希算法,例如Bcrypt或Argon2i。例如,在PHP中,使用password_hash()函数(默认情况下使用Bcrypt)。

$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

结果是一个类似于以下内容的60个字符的字符串(但是数字会有所不同,因为它会生成唯一的盐)。

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

使用SQL数据类型CHAR(60)存储Bcrypt哈希的这种编码。请注意,此函数不会编码为十六进制数字的字符串,因此我们无法轻松地将其以十六进制形式存储为二进制。

其他散列函数仍具有用途,但不能用于存储密码,因此,我将在下面保留原始答案,该答案写于2008年。

这取决于您使用的哈希算法。不管输入如何,散列总是产生相同长度的结果。通常用一系列十六进制数字表示文本中的二进制哈希结果。或者,您可以使用该UNHEX()函数将十六进制数字的字符串减少一半。

  • MD5生成一个128位哈希值。您可以使用CHAR(32)或BINARY(16)
  • SHA-1生成一个160位的哈希值。您可以使用CHAR(40)或BINARY(20)
  • SHA-224生成224位哈希值。您可以使用CHAR(56)或BINARY(28)
  • SHA-256生成256位哈希值。您可以使用CHAR(64)或BINARY(32)
  • SHA-384生成384位哈希值。您可以使用CHAR(96)或BINARY(48)
  • SHA-512生成512位哈希值。您可以使用CHAR(128)或BINARY(64)
  • BCrypt生成依赖于实现的448位哈希值。您可能需要CHAR(56),CHAR(60),CHAR(76),BINARY(56)或BINARY(60)

自2015年起,NIST 建议在需要互操作性的哈希函数的任何应用程序中使用SHA-256或更高版本。但是NIST不建议使用这些简单的哈希函数来安全地存储密码。

较小的散列算法有其用途(例如在应用程序内部,而不是用于交换),但是众所周知,它们是可破解的。



 类似资料:
  • 问题内容: 我想在数据库中存储哈希密码(使用BCrypt)。什么是一个好的类型,哪个是正确的长度?用BCrypt散列的密码是否总是相同长度? 编辑 哈希示例: 在对一些密码进行哈希处理之后,BCrypt似乎总是生成60个字符的哈希。 编辑2 很抱歉没有提及实施。我正在使用jBCrypt。 问题答案: bcrypt的模块化crypt格式包括 ,或识别哈希算法和格式 表示费用参数的两位数字值,后跟 一

  • 不,这个问题不是众多“存储密码的最佳MySQL数据类型是什么”的重复。 我的密码哈希当前在节点上使用pbkdfSync进行。js,我将输出设置为128(无论它是什么字节位),它将输出256个字符的哈希。 你可能会问有什么问题?嗯,这就是我的想法。在我遇到这个问题之前:使用VARCHAR时,“列密码的值太长”。 许多谷歌搜索都说varchar字符限制为65535个字符,但出于某种原因,我认为只有25

  • 我记得读过一个方案,其中检查密码的过程是这样的: 给定数据库中的(哈希、盐)值, 用salt哈希密码以检查哈希, 使用旧哈希作为salt的哈希密码, 在数据库中存储(新哈希,也称为旧哈希) 我找不到原始来源无论如何,我不明白 > < li> 使用旧哈希作为salt的优势是什么(与使用随机salt相反), 这种方案的优点是什么(进一步使彩虹表攻击复杂化?),以及 如果有优势,如何使用PHPass应用

  • 每个人在建构 PHP 应用时终究都会加入用户登录的模块。用户的帐号及密码会被储存在数据库中,在登录时用来验证用户。 在存储密码前正确的 哈希密码 是非常重要的。密码的哈希操作是单向不可逆的,该哈希值是一段固定长度的字符串且无法逆向推算出原始密码。这就代表你可以哈希另一串密码,来比较两者是否是同一个密码,但又无需知道原始的密码。如果你不将密码哈希,那么当未授权的第三者进入你的数据库时,所有用户的帐号

  • 问题内容: 如何使用Spring Security 3对密码进行哈希处理并对其加盐? 问题答案: 以编程方式,您可以按照以下步骤进行操作: 在application- context.xml(在web.xml下的定义)文件中定义bean(此示例使用)。 然后自动连接密码编码器: 在您的方法中或您想散列和加盐的任何地方。 上面的调用应返回一个加盐的哈希值(作为)。 那应该做。我假设您可以弄清楚所需的

  • 本文向大家介绍密码哈希函数 Bcrypt的最大密码长度限制详解,包括了密码哈希函数 Bcrypt的最大密码长度限制详解的使用技巧和注意事项,需要的朋友参考一下 密码哈希函数 Bcrypt的最大密码长度限制 Bcrypt是一个很流行的密码哈希算法,是Niels Provos和DavidMazières基于Blowfish加密算法设计的密码哈希算法,于1999年在USENIX协会上提交。Bcrypt在