2012-09-13 132 views
1

我将密码和用户登录一起散列,并将其作为VARBINARY长度保存在数据库中。访问散列密码

现在,我正在尝试在asp.net中构建登录页面。我怎样才能从数据库中获取密码值,并将其与用户提供的密码值进行比较?我使用SqlDataReader来读取数据库。

问候,

巴尔托什

+0

有关散列与加密的信息:[散列密码和加密它之间的区别](http://stackoverflow.com/questions/326699/difference-between-hashing-a-password-and-encrypting-it?rq = 1) –

+1

不要忘记添加[salt](http://en.wikipedia.org/wiki/Salt_(cryptography)) –

回答

0

你不unhash数据库的密码,并将其与输入。

您对输入进行散列并将其与密码进行比较。如果两个哈希匹配,则认为它是相同的密码。

从技术上讲,这取决于你的哈希函数,它可能不是,因为用户可以有随机进入该散列为相同的值作为真正密码的密码,但是这是迂腐;)

+0

这就是我想要做的。但是,如何将包含我散列密码的阅读器[“密码”]转换为字节[]以进行比较? – Bartosz

+0

(Byte [])reader [“usrPassword”]我在找。无论如何,谢谢 – Bartosz

0

你创建一个散列(用与创建初始散列相同的算法),在用户输入并在db中搜索密码的情况下(如果散列与初始散列相同) - >是的,它是相同的密码

散列的想法是有一个不可退回的功能 - >你可以检查它是否相同,但你永远不能重建输入数据。

+0

这就是我想要做的。但是,如何将包含我散列密码的阅读器[“密码”]转换为字节[]以进行比较? – Bartosz

1

您需要将这些文件存储在包含带有用户名的列的表格中,以明文形式显示,以便您可以根据尝试登录的用户获取哈希值。并将散列输入与散列存储的输入进行比较。

+0

我确实有明文保存在数据库中的用户名。其采购散列密码并将其转换为字节[],以供比较,我无法做到。 – Bartosz

0

作为RB。说,你检索从数据库传递的散列。然后你使用用户提供的密码,并使用之前使用的哈希算法对其进行哈希处理。如果数据库中的散列码与用户输入的密码的散列码相匹配,那么密码是正确的。

+0

这就是我想要做的。但是,如何将包含我散列密码的阅读器[“密码”]转换为字节[]以进行比较? – Bartosz

+0

看看类似的问题。有代码来编写散列字节。 http://stackoverflow.com/questions/2687196/asp-net-membership-c-sharp-how-to-compare-existing-password-hash – tranceporter