密码哈希应该以二进制或十六进制数存储吗?

IMB*_*IMB 7 php mysql security passwords hash

我通常将它存储在十六进制数字中但是我意识到如果我将它存储在MySQL内的二进制文件中,我可以节省一半的空间.如果我决定将其存储在二进制文件中,是否有任何问题需要注意?

Lei*_*igh 7

您希望存储多少个密码?一半的空间对你来说意味着什么?

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

我的意见是你应该以一种方便你工作的方式存储它们,而不是一个可以节省很少空间的方式.

编辑:

要做出一些假设,并借此机会进一步帮助你.

由于你的密码是十六进制的,我会假设你没有使用crypt,如果你不是,你应该是.最糟糕的情况是,你正在使用md5 ......并且上帝正在杀死小猫.

关于堆栈溢出的bcrypt已经有很多问题和答案,所以我不会在这里再次讨论这些信息.

问题SHA512与Blowfish和Bcrypt是一个很好的起点.

另请阅读@ircmaxell关于此主题的几篇博文:

  • @Leigh 看起来二进制会节省我的空间,但十六进制会节省我的时间:-) (4认同)

Sti*_*ers 5

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


Hug*_*ing 5

免责声明:说实话,这个问题必须处于纯粹基于意见的边缘。因此,您得到的任何答案都取决于偏好和经验。

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

任何好的加密都有 and encrypta decryptorcompare方法。通常,encrypt您需要将的输出作为decrypt/的输入传递compare

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

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

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

  • 有一个用于此类讨论的编程堆栈交换。Stackoverflow 适用于可解决的编码问题 (4认同)