Tag: rfc2898

JavaScript:如何生成像C#这样的Rfc2898DeriveBytes?

编辑:在评论中的每次讨论中,让我澄清一下,这将发生在SSL后面的服务器端。 我不打算将散列密码或散列方案暴露给客户端。 假设我们有一个现有的asp.net身份数据库,其中包含默认表(aspnet_Users,aspnet_Roles等)。 根据我的理解,密码散列算法使用sha256并将salt +(散列密码)存储为base64编码的字符串。 编辑:这个假设不正确,请参阅下面的答案。 我想用JavaScript版本复制Microsoft.AspNet.Identity.Crypto类’ VerifyHashedPassword函数的function。 假设密码是welcome1 ,其asp.net哈希密码是ADOEtXqGCnWCuuc5UOAVIvMVJWJANOA / LoVy0E4XCyUHIfJ7dfSY0Id + uJ20DTtG + A == 到目前为止,我已经能够重现获取salt和存储的子键的方法部分。 C#实现或多或少地执行此操作: var salt = new byte[SaltSize]; Buffer.BlockCopy(hashedPasswordBytes, 1, salt, 0, SaltSize); var storedSubkey = new byte[PBKDF2SubkeyLength]; Buffer.BlockCopy(hashedPasswordBytes, 1 + SaltSize, storedSubkey, 0, PBKDF2SubkeyLength); 我在JavaScript中有以下内容(任何方面都不优雅): var hashedPwd = “ADOEtXqGCnWCuuc5UOAVIvMVJWjANOA/LoVy0E4XCyUHIfJ7dfSY0Id+uJ20DTtG+A==”; var hashedPasswordBytes = new Buffer(hashedPwd, ‘base64’); var saltbytes = […]

使用Rfc2898DeriveBytes在C#中实现PBKDF2

伙计们,我正在尝试在C#中实现一个创建WPA共享密钥的PBKDF2函数。 我在这里找到了一些: http : //msdn.microsoft.com/en-us/magazine/cc163913.aspx似乎产生了一个有效的结果,但是它的一个字节太短了……而且错误的PSK值。 为了测试输出,我将其与此进行比较: http : //www.xs4all.nl/~rjoris/wpapsk.html或http://anandam.name/pbkdf2/ 我确实找到了一种方法来使用C#内置库来调用Rfc2898DeriveBytes。 使用这个,我得到一个有效的输出: Rfc2898DeriveBytes k3 = new Rfc2898DeriveBytes(pwd1, salt1, 4096); byte[] answers = k3.GetBytes(32); 现在,我使用Rfc2898DeriveBytes的一个限制是“盐”必须是8个八位字节长。 如果它更短,则Rfc2898DeriveBytes会抛出exception。 我想我所要做的就是将盐(如果它更短)填充到8个字节,我会很好。 但不是! 我已经尝试了几乎所有填充与较短盐的组合,但我不能复制我从上面这两个网站得到的结果。 那么底线是,这是否意味着Rfc2898DeriveBytes只是不能使用短于8字节的源盐? 如果是这样,有没有人知道我可以使用哪些C#代码为WPA预共享密钥实现PBKDF2?