在.NET中使用PBKDF2和HKDF进行密码哈希处理

Alxandr

我的任务是编写一种新的方法来计算密码哈希值,以取代我们认为还不够安全的旧方法。不久前,我读了《安全驱动.NET》一书,其中我了解到重要的部分是使用一种算法,该算法具有可配置的转数(与简单的哈希相反),而在.NET中,推荐的算法是叫PBKDF2用于密码处理。我还读到,这是对ASP.NET处理密码的一种改进,如果通过使用PBKDF2创建主数据库将存储在数据库中的结果散列以密码方式与用户(名称或ID)绑定在一起,那就太好了。密钥,然后使用用户名(或ID)使用HKDF创建派生密钥。但是,这又是我从一本我当前无法访问的书中读到的肤浅知识,因此我无法重新检查自己的记忆是否正确。

另外,我以前没有使用过.NET DerivedBytes API,所以我可能做错了。所以我的问题是这样的:我是否在以下代码中正确执行操作?我是否正确使用了API?而且此实现是否“足够安全”?还是我做错了什么,从而完全消除了所有安全性?

protected override byte[] ComputeHash(string user, string salt, string password)
{
    var userBytes = user.ToBytes();
    using (var pbkdf2 = new PBKDF2(MacFactories.HMACSHA512, password.ToBytes(), salt.ToBytes()))
    {
        var masterKey = pbkdf2.GetBytes(128);
        using (var hkdf = new HKDF(MacFactories.HMACSHA512, masterKey, userBytes, userBytes))
        {
            return hkdf.GetBytes(64);
        }
    }
}
地狱作者

您有正确的想法/方法-这是一个更好的实现:

byte[] ComputeHash(string user, string salt, string password)
{
    using (var pbkdf2 = new PBKDF2(HMACFactories.HMACSHA512, password, salt.ToBytes()))
    using (var hkdf = new HKDF(HMACFactories.HMACSHA512, pbkdf2.GetBytes(64), user.ToBytes()))
        return hkdf.GetBytes(64);
}

您所要求pbkdf2的字节数不应超过基础PRF的字节长度(在您的情况下为SHA512,它将产生64个字节)。

您可以保留hkdf上下文,null因为似乎不需要它。

对于其他人可能想知道上面代码使用的库-Inferno crypto

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用盐和迭代计数的用户密码的Java / Node PBKDF2哈希-等效节点

来自分类Dev

HKDF或PBKDF2用于生成对称加密密钥?(Python密码学)

来自分类Dev

在Java和PHP中使用PBKDF2

来自分类Dev

使用带有128位密钥的AES和PBKDF2的Java密码体系结构进行文件加密

来自分类Dev

是否可以恢复PBKDF2哈希密码?

来自分类Dev

Ironclad和Couch PBKDF2哈希之间的不匹配

来自分类Dev

Java和打字稿产生差异PBKDF2哈希

来自分类Dev

如何使用PBKDF2在Java和Ruby中生成相同的安全哈希

来自分类Dev

openssl如何使用PBKDF2构造从密码派生的密钥?

来自分类Dev

ASP.NET Identity 2是否使用machinekey来对密码进行哈希处理?

来自分类Dev

PBKDF2密码存储-如何验证?

来自分类Dev

验证.NET中Python Passlib生成的PBKDF2 SHA512哈希

来自分类Dev

验证.NET中Python Passlib生成的PBKDF2 SHA512哈希

来自分类Dev

javascript和iOS中的PBKDF2哈希生成不同的密钥

来自分类Dev

如何从密码和 PBKDF2 迭代中获取原始密钥数据

来自分类Dev

ASP.NET Identity 2是否使用计算机密钥对密码进行哈希处理?

来自分类Dev

PBKDF2和Java中的HMAC

来自分类Dev

PBKDF2和C#问题

来自分类Dev

如何使用mongoengine在django中使用基本登录表单对密码进行哈希处理?

来自分类Dev

PBKDF2是否生成唯一的哈希?

来自分类Dev

与密码一起存储PBKDF2设置

来自分类Dev

Spring Security和H2:如何对密码进行哈希处理

来自分类Dev

在多线程应用程序中使用基于openssl的pbkdf2

来自分类Dev

是否可以在SJCL中使用bcrypt或scrypt替代PBKDF2?

来自分类Dev

如何在.net Core中对密码进行哈希处理

来自分类Dev

在php中使用密码哈希和密码验证登录问题

来自分类Dev

使用SQL Server 2008 CLR进行密码哈希处理

来自分类Dev

使用PHPass对Codeigniter中的密码进行哈希处理

来自分类Dev

使用AJAX发送时是否应该对密码进行哈希处理?

Related 相关文章

  1. 1

    使用盐和迭代计数的用户密码的Java / Node PBKDF2哈希-等效节点

  2. 2

    HKDF或PBKDF2用于生成对称加密密钥?(Python密码学)

  3. 3

    在Java和PHP中使用PBKDF2

  4. 4

    使用带有128位密钥的AES和PBKDF2的Java密码体系结构进行文件加密

  5. 5

    是否可以恢复PBKDF2哈希密码?

  6. 6

    Ironclad和Couch PBKDF2哈希之间的不匹配

  7. 7

    Java和打字稿产生差异PBKDF2哈希

  8. 8

    如何使用PBKDF2在Java和Ruby中生成相同的安全哈希

  9. 9

    openssl如何使用PBKDF2构造从密码派生的密钥?

  10. 10

    ASP.NET Identity 2是否使用machinekey来对密码进行哈希处理?

  11. 11

    PBKDF2密码存储-如何验证?

  12. 12

    验证.NET中Python Passlib生成的PBKDF2 SHA512哈希

  13. 13

    验证.NET中Python Passlib生成的PBKDF2 SHA512哈希

  14. 14

    javascript和iOS中的PBKDF2哈希生成不同的密钥

  15. 15

    如何从密码和 PBKDF2 迭代中获取原始密钥数据

  16. 16

    ASP.NET Identity 2是否使用计算机密钥对密码进行哈希处理?

  17. 17

    PBKDF2和Java中的HMAC

  18. 18

    PBKDF2和C#问题

  19. 19

    如何使用mongoengine在django中使用基本登录表单对密码进行哈希处理?

  20. 20

    PBKDF2是否生成唯一的哈希?

  21. 21

    与密码一起存储PBKDF2设置

  22. 22

    Spring Security和H2:如何对密码进行哈希处理

  23. 23

    在多线程应用程序中使用基于openssl的pbkdf2

  24. 24

    是否可以在SJCL中使用bcrypt或scrypt替代PBKDF2?

  25. 25

    如何在.net Core中对密码进行哈希处理

  26. 26

    在php中使用密码哈希和密码验证登录问题

  27. 27

    使用SQL Server 2008 CLR进行密码哈希处理

  28. 28

    使用PHPass对Codeigniter中的密码进行哈希处理

  29. 29

    使用AJAX发送时是否应该对密码进行哈希处理?

热门标签

归档