首页 > 解决方案 > .Net 核心中用于标识符散列(不是密码)的 PBKDF2

问题描述

在存储到数据库之前,我需要对标识符进行哈希处理。总共将有多达 100 万个值。我需要对这些值进行化名以符合 GDPR。

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

我打算使用 SHA256,但我读到 PBKDF2 更安全。但是,我读过 PBKDF2 容易发生冲突。最重要的是,我使用的散列实现具有较低的冲突机会。PBKDF2 的冲突率是否比简单的 SHA256 更高?使用带有 PBKDF2 的 HMACSHA512 的密钥派生而不是 HMACSHA1 会减少冲突的可能性吗?想要为 Net core 提供安全、低冲突的单向哈希的建议。

标签: asp.net-coreencryptionhash.net-core

解决方案


总共将有多达 100 万个值。我需要对这些值进行假名化以符合 GDPR
我打算使用 SHA256 但我读过 PBKDF2 更安全。

对于这个用例,正确的加密哈希是最好的选择。

PBKDF2 是一种密钥派生函数,旨在从相对较弱的密码中派生出更高熵的密钥。它在底层使用哈希,因此如果哈希具有一定的哈希冲突概率,pbkdf 将具有相同的哈希值。

pbkdf2 旨在变慢(使用迭代)以减轻暴力破解输入密码的可行性。您不需要该属性,即使它可能对您的用例不利。

所以 - 你可以大胆地使用 sha256 来匿名化你的数据,恕我直言,这可能是你今天最好的选择。事实上,原则上你不能防止哈希冲突,但概率应该可以忽略不计


推荐阅读