【发布时间】:2012-02-13 20:26:36
【问题描述】:
我正在尝试创建一个具有登录/注销功能的网站,并且我计划对密码进行适当的散列和加盐处理。然而,我面临的问题是如何将密码存储在数据库中。我知道我需要将散列+加盐密码存储在数据库中(不是纯文本或纯加密),但我不知道如何在技术上绕过将二进制数据插入数据库。
在我早期的尝试中,我可以在数据库中获取数据的唯一方法是将二进制数据转换为 base64 字符串并插入到varchar 密码字段中,但有些事情告诉我这不正确方法。
数据库中的密码字段目前是varchar,但据我了解,散列密码是二进制的。所以即使我将密码字段更改为二进制对象,我仍然不知道如何实际插入它!
如果我没有任何意义,请要求澄清,我会回复你。
【问题讨论】:
-
哈希可以是 varchar...它根本不必是二进制的,但出于好奇,您使用的 has 函数是什么?
-
为什么不想使用base64?很简单,数据小到不用担心大小。
-
Base64 是将哈希保留为人类可读形式的最安全方法。将加盐哈希存储为纯文本并没有错;这就是存储哈希而不是密码的全部目的。
-
好吧,我正在使用 SHA-512 对密码进行哈希处理,如下所示:
byte[] pwdEntered = pw512.ComputeHash(System.Text.Encoding.Unicode.GetBytes(pwBox.Text));,而我放入数据库的值就是这样的结果:Convert.ToBase64String(pwdEntered)。 @Chris - 并不是我不想使用 base64,只是这是我第一次这样做,所以我不确定这是否是一种可以接受的方式,或者是否有其他奇特的方式这样做。 -
这个问题与认证无关。应该是“如何将二进制数据插入表中”。
标签: c# .net sql-server hash