【问题标题】:Should password hash be stored in binary or hexadecimal number?密码哈希应该以二进制还是十六进制存储?
【发布时间】:2012-08-05 22:48:05
【问题描述】:

我通常将它存储为十六进制数字,但我意识到如果我将它存储在 MySQL 中的二进制文件中,我可以节省一半的空间。如果我决定将其存储为二进制文件,我应该注意哪些问题?

【问题讨论】:

标签: php mysql security hash passwords


【解决方案1】:

免责声明:让我们说实话,这个问题必须在纯粹基于意见的情况下被关闭。因此,您得到的任何答案都取决于偏好和经验。

只是在这个问题上添加我的常识性答案:您应该按照从加密工具/方法中获取它的方式存储它。

任何好的加密都有encryptdecryptcompare 方法。通常encrypt 的输出是您需要作为输入传递给decrypt/compare

无论encrypt 产生什么输出,都应该是存储它的首选方式。

您可以将输出转换为您喜欢的任何内容,无论是二进制、十六进制、base64 还是使用笔和纸写下来,加密后的值都不会变得或多或少安全。找到该值的人将需要加密密钥来解密它。

但每次转换某些内容时,您还需要将其转换回之前的状态。这意味着您添加了一层新的潜在问题并增加了整个过程的开销。不管它多么微不足道,它仍然比不做它更复杂/更慢。

【讨论】:

  • “说实话,这个问题肯定会因为纯粹基于意见而被关闭。”伊莫,这很难过。这是几乎每个开发半严肃应用程序的开发人员都必须做出的决定,但我们没有一个像样的答案可供参考。当然,我有我的猜测,但我不知道我是否遗漏了什么。
  • 有一个用于此类讨论的编程堆栈交换。 Stackoverflow 用于解决可解决的编码问题
【解决方案2】:

涉及密码的主要动机是它的安全性,而不仅仅是扩展它在数据库中占用的大小或空间,因此您的密码必须包含所有安全实体例如算法算法选项(例如:时间成本、内存成本、线程)、哈希密码.这一切使您的密码比简单的十六进制或二进制密码强得多。

参考资料:

Safe Password Hashing

Password Hash

并且根据第一个链接 建议在散列密码时使用的算法是 Blowfish,这也是密码散列 API 使用的默认算法,因为它的计算成本明显高于 MD5 或 SHA1,同时仍然是可扩展。

您可以使用

echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

输出

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

这里您的密码由所有算法算法选项(例如:时间成本、内存成本、线程)、、哈希密码

【讨论】:

    【解决方案3】:

    您希望存储多少个密码?一半的空间对你来说真的那么重要吗?

    您可能在应用程序中以十六进制形式表示密码,因此在对这些密码执行任何操作时,将它们存储为二进制会增加另一层复杂性和处理开销。

    我的意见是,您应该以方便您使用的方式存储它们,而不是为您节省少量空间。

    编辑:

    做一些假设,并借此机会进一步帮助您。

    由于您的密码是十六进制的,我假设您没有使用crypt,如果您没有使用,那么您应该使用。最坏的情况,你正在使用 md5……而上帝正在杀死小猫。

    已经有很多关于 bcrypt on stack overflow 的问题和答案,所以我不会在这里再次介绍这些信息。

    问题SHA512 vs. Blowfish and Bcrypt 是一个很好的起点。

    还可以阅读 @ircmaxell 的几篇关于该主题的博文:

    【讨论】:

    • 好点,每次从数据库中提取记录时,您都必须将它们解压缩为十六进制。
    • 或者你打包你想和保存的哈希比较的密码。我不认为,这非常困难。但是,我也不认为这是不值得的。
    • 我过去也遇到过一个问题,即使用二进制字段严重转储的数据库需要大量工作才能恢复。
    • @Leigh 那个严重转储的数据库上是否有二进制密码?
    • @Leigh 看起来二进制会节省我的空间,但十六进制会节省我的时间:-)
    【解决方案4】:

    从可用性的角度来看,最好将哈希存储为十六进制。以二进制形式存储它们意味着还需要一个步骤来将纯文本输入与存储的密码进行比较。它还可能会给在您继续进行项目后从事您项目工作的任何人增加一层混乱。 “为什么这个密码是二进制存储的?”

    【讨论】:

    • 如果编码不正确,二进制会非常烦人,另外一个缺点是无法轻松查看或复制粘贴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2018-02-13
    • 2014-10-30
    • 2013-12-20
    • 2016-05-24
    • 2020-12-19
    相关资源
    最近更新 更多