散列敏感数据

时间:2008-10-06 01:13:20

标签: c# encryption hash

我需要对我们拥有的UAT数据库中所有用户的名称和登录进行加扰。 (因为数据保护法)

然而,有一个问题。

测试人员仍然需要能够使用散列登录名登录

因此,如果用户登录为“Jesse.J.James”,那么散列应该类似于

Ypois.X.Qasdf

即。大致相同的长度,点在同一个地方

所以MD5,sha1等不合适,因为它们会创建非常长的字符串,并且还会添加自己的特殊字符,例如+和=,这是验证正则表达式所不允许的。

所以我正在寻找一些关于如何实现这个的建议

我想我需要自己动摇哈希算法

是谁做过类似的事?

我正在使用c#,但我想这对算法来说并不那么重要

非常感谢

已添加

感谢所有答案。当我不需要做什么时,我认为我应该使用“哈希”这个词来解决这个问题。

9 个答案:

答案 0 :(得分:10)

测试人员不应该以合法用户身份登录。这显然违反了您正在进行的任何数据保护行为的不可否认性要求。

系统不应允许任何人使用散列值登录。这打败了哈希的整个目的!

对不起,我没有回答您的具体问题,但我认为您的整个测试系统应该重新评估。

<强>增加:

以下JPLemme的评论为你所做的事情提供了很多启示,我担心我完全被误解了(大概是那些投票支持我的人)。

部分混淆是基于这样的事实:哈希通常用于加密密码,这样任何人都无法发现其他人的密码,包括那些在系统上工作的密码。也就是说,显然是错误的上下文(现在我理解你为什么要哈希用户名而不仅仅是密码)。正如JPLemme指出的那样,您实际上正在使用一个完全独立的并行系统,实时数据已经被复制和匿名化,并且使用散列(和盐渍!)密码的安全登录过程不会受到骚扰。

在这种情况下,WW的答案更具相关性,我建议大家向他/她投票。对不起,我误解了。

答案 1 :(得分:8)

您不需要散列数据。你应该随机化它,使它与原始数据无关。

例如,更新所有登录名,并用另一个随机字母替换每个字母。

答案 2 :(得分:4)

我认为你在这里采取了错误的做法。哈希的想法是它是单向的,没有人应该能够使用该哈希来访问系统(如果他们可以,那么你可能仍然违反了数据保护法。此外,测试人员不应该使用真实账户除非这些账户是他们自己的账户。

您应该让测试人员在分离的环境中使用模拟帐户。通过在单独的环境中使用模拟帐户,向测试人员提供帐户信息没有任何危险。

答案 3 :(得分:1)

一般来说,建议您使用自己的加密/散列算法。现有算法出于某种原因做了他们的工作。

要么为测试人员提供一个为他们提供用户名的访问路径,还是只让他们复制/粘贴SHA-1哈希,真的会这么糟糕吗?

答案 4 :(得分:1)

根据定义,哈希是单向的。

如果你想要保护的只是随意阅读数据(所以加密级别很低),做一些简单的事情就像转置密码(1-1将不同字符映射到另一个 - A变成J ,B变成' - '等)。或者甚至只是将所有东西都换成一个(IBM变成HAL)。

但请注意,这绝不是对隐私或安全的保证。如果这些都是您正在寻找的品质,那么根据定义,您无法让测试人员模仿真实用户。

答案 5 :(得分:1)

此建议是否通过贵组织的审核部门?如果没有,你可能想与他们交谈,你所使用的方案一点也不清楚,保护你的组织免于承担责任。

答案 6 :(得分:0)

为什么不将测试数据生成器用于可以识别个人的数据?

Creating test data in a database

答案 7 :(得分:0)

为您提供更多信息:

我需要测试一个DTS包,它将系统的所有用户从文本文件导入到我们的数据库中。我将获得实时数据。

但是,一旦数据在数据库中,它必须被加扰,以便它对随意读者没有意义,但允许测试人员登录系统

答案 8 :(得分:0)

感谢所有答案。我认为你的测试策略错误几乎肯定是正确的。

我会看看我是否可以改变那些力量的思想