密码哈希:固定长度的二进制字段还是单个字符串字段?

TC *_*Fox 6 performance optimization database-agnostic

我目前正在与一位朋友进行有趣的辩论,我们根本无法就在数据库中存储加盐密码的最佳方法达成一致。表上的两个选项是:

  • 将散列和盐作为字符串存储在一起,由一些约定的字符分隔(例如:“E69B4A103...598D$59FBA6”)
  • 将散列和盐存储在单独的固定长度的二进制字段中

第一个的明显优势是只需要检索一个字段,但代价是该字段明显更大(尤其是在使用 SHA512 或大盐时),并且在应用程序的后期处理字符串操作时会降低性能。

选项二的优点是体积小得多,但代价是要检索两个字段而不是一个字段的查询稍微复杂一些。

我们的问题是:对于性能是关键因素的大型数据库,哪个选项最有意义?

gbn*_*gbn 9

有2位信息。这意味着 2 个字段。就是这么简单。

实际上,选择 2 列的额外复杂度为零。必须读取一个大字段来解析一位是不必要的复杂性和性能开销。

关于用散列存储盐的几个问题

  • 大 +1 “实际上,选择 2 列是零额外的复杂性。必须读取一个大字段来解析一位是不必要的复杂性和性能开销。” (2认同)
  • 盐作为字符串,密码作为固定二进制 (2认同)