2012-02-24 34 views
1

我目前工作日志的形式和我听说来存储密码是哈希他们最好的方式,但我把“哈希”密码数据库(在列只有字节数据类型放置)我把字节数据库中,然后检索然后将其转换为字符串来比较它们与用户的输入是它是如何工作的?如果是这样,我会怎么做LINQ TO SQL?散列密码数据库的LINQ to SQL

+0

不要在计算中使用它的值数据比较字符串。比较字节。 – Kamil 2012-02-24 17:21:29

+0

为什么?如果散列产生一个字符串会怎么样? – 2012-02-24 17:24:42

+0

我正在使用加密,但每次我散列相同的密码,他们所有人都有不同的价值,我怎么会知道他们都匹配? – user962206 2012-02-24 17:27:43

回答

3

我觉得一般的做法是盐/哈希存储在数据库中他们当用户创建自己的帐户密码。然后,验证用户salt /散列用户的输入并将其与数据库存储的密码进行比较。

+0

有没有在线实施?或完整的指南或示例 – user962206 2012-02-24 17:26:50

+0

@ user962206说实话,你可能不应该从头开始编写自己的认证系统,你应该利用现有的认证系统。为了回答你的具体问题,是的,有很多人在做这个在线的例子。即使大多数写它的人没有在生产环境中使用他们自己的代码,这也是一种常见的学术练习。 – Servy 2012-02-24 18:00:45

2

当用户试图验证您使用他们输入密码相同的散列算法和搜索数据库中与输入的用户名和匹配你刚才生成的一个散列的用户。如果你得到一个结果,那就是用户认证它们。

注意,在任何时候,你带的哈希并将其转换回明文密码。散列的全部目的是它是你不能做的事情(至少在实际意义上是这样)。它没有加密,这不是双向的。一旦哈希,如果你可以将其恢复为原始密码,那么你就不会使用足够好的哈希算法。

2

有散列和加密之间的两个主要区别:

1)当你哈希例如密码,结果是唯一的,但是当你进行加密,其结果应该是随机的,每次你加密的相同数据。

2)散列是单向的,加密是双向的,这意味着检索的哈希数据是没有意义的,但你可以解密加密的数据。

这里可能会出现一个问题:何时应该使用哈希和使用加密?

答案很简单。如果你不想向用户显示真实的数据,或者你不想在你的程序的任何地方使用它,它只用于验证或验证(如登录密码),使用散列和保存散列表是明智的数据库中的数据。在进行身份验证时,只需简单地对输入进行哈希处理,而且由于哈希法给出了与搜索所需表相同的结果以查找其匹配项。在另一方面,加密用于我们可能需要将其展示给用户或(打印费显示什么付款是由信用卡支付时,显示其信用卡号码)