Binary 将密码存储为十六进制而不是二进制的安全风险

Binary 将密码存储为十六进制而不是二进制的安全风险,binary,hex,password-encryption,Binary,Hex,Password Encryption,我刚刚学习了一个教程,它告诉我使用hash_hmac对我的密码进行hash,设置“true”以二进制格式输出。然后在MySql数据库中将其保存为varbinary(32)格式 我花了最后一个小时处理用户登录表单,我很难比较输入的散列密码和数据库中的散列密码,因为我想我已经被十六进制/二进制的差异弄糊涂了 我的问题是:以二进制格式存储密码有什么好处?这仅仅是一项节省空间的措施吗?还是通过某种方式提高了安全性 如果这只是一个节省空间的措施,我想我会将它们存储为十六进制,因为对我来说,它更容易使用 谢

我刚刚学习了一个教程,它告诉我使用hash_hmac对我的密码进行hash,设置“true”以二进制格式输出。然后在MySql数据库中将其保存为varbinary(32)格式

我花了最后一个小时处理用户登录表单,我很难比较输入的散列密码和数据库中的散列密码,因为我想我已经被十六进制/二进制的差异弄糊涂了

我的问题是:以二进制格式存储密码有什么好处?这仅仅是一项节省空间的措施吗?还是通过某种方式提高了安全性

如果这只是一个节省空间的措施,我想我会将它们存储为十六进制,因为对我来说,它更容易使用

谢谢

这仅仅是一项节省空间的措施吗?或者它能提高一些安全性 路


将其存储为
varbinary(32)
中的二进制文件而不是
char()中的文本,这无疑是一种节省空间的措施。以这种或那种方式存储不会影响安全性。

它节省了空间,但也是本机格式。十六进制仅仅是字节数据的文本表示。在大多数语言中,从一种语言转换到另一种语言是很简单的,那么为什么要通过将其存储为文本来占用比需要更多的空间呢?顺便说一句,您提出的解决方案是:“如果这只是一种节省空间的措施,我想我会将它们存储为十六进制,因为对我来说,它更容易使用”,这是懒惰程序员的出路。一个好的程序员会问:“为什么我的正确实现方式不起作用?”然后继续学习如何以正确的方式实现它。比较字节和比较字符一样容易(通常容易得多)。它也不太容易出错,因为角色集和角色大小写没有发挥作用。但这正是问题所在。当使用Varbinary存储时,我得到大量黑色三角形的问号。目前还不清楚这些是什么以及如何进行比较。使用hex,我可以清楚地看到两个散列密码是否匹配。我的观点是,你应该问的问题(与此分开)包括你发布有问题的代码,并寻求帮助使其以正确的方式工作,而不是仅仅因为它更简单而追求糟糕的编程实践。当你说“十六进制是本机格式”你是专门指hash_hmac的输出吗?否则,从我对你所说的解释来看,你是否建议数据库中的所有内容都应存储为二进制?