Asp.net core 用于.Net核心中的标识符哈希(非密码)的PBKDF2

Asp.net core 用于.Net核心中的标识符哈希(非密码)的PBKDF2,asp.net-core,encryption,hash,.net-core,Asp.net Core,Encryption,Hash,.net Core,在存储到数据库之前,我需要散列标识符。总价值将高达100万。我需要将这些值化名以符合GDPR 我正在使用.NETCore,我想继续使用核心哈希功能。我不想冒险使用外部哈希实现。其目的是在散列之前为每个值添加一个salt短语。供应商已经对这些值进行了散列,但在存储到db之前,我将再次进行散列 我本来打算使用SHA256,但我读到PBKDF2更安全。然而,我读到PBKDF2容易发生碰撞。最重要的是,我使用的哈希实现具有较低的冲突几率。PBKDF2是否具有比简单SHA256更高的冲突率?与HMACSH

在存储到数据库之前,我需要散列标识符。总价值将高达100万。我需要将这些值化名以符合GDPR

我正在使用.NETCore,我想继续使用核心哈希功能。我不想冒险使用外部哈希实现。其目的是在散列之前为每个值添加一个salt短语。供应商已经对这些值进行了散列,但在存储到db之前,我将再次进行散列

我本来打算使用SHA256,但我读到PBKDF2更安全。然而,我读到PBKDF2容易发生碰撞。最重要的是,我使用的哈希实现具有较低的冲突几率。PBKDF2是否具有比简单SHA256更高的冲突率?与HMACSHA1相反,使用带有PBKDF2的HMACSHA512的密钥派生是否降低了碰撞的可能性? 希望为Net core提供安全、低冲突单向哈希的建议

总价值将高达100万。我需要将这些值化名以符合GDPR
我本来打算使用SHA256,但我读到PBKDF2更安全

对于这个用例,正确的加密散列是最好的选择

PBKDF2是一个密钥派生函数,旨在从相对较弱的密码派生出更高熵的密钥。它在引擎盖下使用散列,因此如果散列具有一定的散列冲突概率,则pbkdf将具有相同的冲突概率

pbkdf2旨在降低速度(使用迭代),以降低强制输入密码的可行性。您不需要该属性,即使它可能对您的用例有害


因此,您可以大胆地使用sha256来匿名化您的数据,我想这可能是您目前的最佳选择。事实上,原则上您无法防止哈希冲突,但概率应该可以忽略不计

您在哪里读过关于PBKDF2容易发生冲突的文章?不应该这样。PBKDF2的参数为哈希函数。如果您使用SHA256作为PBKDF2的参数,那么它应该比单个SHA256更容易发生冲突。“使用PBKDF2 HMAC进行哈希运算时,发现冲突的密码是很容易的。”好的,我现在明白了。对于特定的情况,很容易产生冲突。但实际上这不会发生。他们使用相同的salt(这显然是安全缺陷),并且使用特定的消息,这相当于某些数据的散列。这种情况的概率等于2^(散列大小)。你可以毫无顾虑地使用PBKDF2,只是别忘了使用随机盐。啊,好吧。。盐不会变。我将使用相同的盐散列标识符。这些将是批处理数据集,能够跟踪相同的哈希值进行纵向分析非常重要。当你说“如果你使用SHA256作为PBKDF2的参数,它应该比单个SHA256更容易发生冲突”你的意思是如果我想减少冲突的可能性,我应该只使用SHA256而不是PBKDF2吗?我认为PBKDF2不需要用于你的用例。但是您应该更好地描述用例以确保。