2016-06-07 87 views
1

我们有一个遗留应用程序,它将用户的密码存储在未加密的数据库中。我们已经有一小部分客户加入了这个密码,这对他们来说是一件大事(足够公平)。目前它只是一个SQL Server数据库表中的Nvarchar(100)字段。在传统SQL Server数据库中加密密码字段的简单方法

情况是,我们有多个客户端应用程序访问此数据库并验证此密码。

只想获得有关如何在数据库中实现对此字段加密的建议,而无需重新编写读取它的所有客户端应用程序?改变客户端应用程序并非没有问题,但我们试图尽可能避免这种情况。

任何想法?

+0

OMG,您正在存储密码,并且除了用户投诉之外没有看到问题!对不起,但我很惊讶,任何人仍然存储密码,加密或清除。你有任何想法你有财务责任?更不用说为一家为全球企业开发企业软件的软件公司的研发经理。 – zaph

+0

警告:我不是安全专家,但我不会存储数据库密码(加密或不加密)。相反,我会存储哈希码。在SQL Server中,[HASHBYTES](https://msdn.microsoft.com/ro-ro/library/ms174415.aspx)函数可用于生成此类代码。将这些哈希视为加密的一种方式。当我必须检查一个密码时,首先我要生成哈希码,然后我将这个代码与来自数据库的值进行比较。 –

+0

正确的点。不确定[SQL Server HASHBYTES](https://msdn.microsoft.com/en-us/library/ms174415.aspx)究竟做了什么,它似乎只是为了支持标准哈希值。如果它不被腌制和重复,这是不够的。简单地哈希没有salting留下哈希密码开放彩虹表攻击。 – zaph

回答

0

不要那样做,存储盐渍,重复密码的HMACs。使用类似Bcrypt,password_hash,PBKDF2或类似的东西。

如果HMAC没有被盐析和迭代,这是不够的。简单地哈希没有salting留下哈希密码开放彩虹表攻击。

转换现有密码现在

-1
  1. 向您的数据库添加配置表以指定是否需要加密密码。默认值是“不加密”

  2. 上的密码表添加一个“插入/更新触发器”,并根据配置#1,插入/更新

  3. 相应地更改您的应用程序时对数据进行加密。

在这种情况下,您仍然拥有触发器中的加密算法,并且您需要使用权限使触发器安全。

这类问题需要一些头脑风暴,希望我没有遗漏任何东西。

+2

不要加密密码! – zaph

+0

我不明白你的意思。如果您正在谈论我在#1中提到的默认值,那么我的意思是他们不会为拥有客户端应用程序和密码的现有客户加密。显然,可以根据他们的要求来决定。 – FLICKER

+0

请控制你的态度。 – FLICKER