Articles of pbkdf2

Rfc2898DeriveBytes在javascript中的等价物?

我已经看到C#代码可以使用如下代码encryption和解密密码: http://wp7-travel.googlecode.com/svn/trunk/SilverlightPhoneDatabase/Cryptography.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; using System.IO; using System.Reflection; namespace SilverlightPhoneDatabase { /// <summary> /// Class used to encrypt the database /// </summary> public static class Cryptography { /// <summary> /// Incrypt the input using password provided /// </summary> /// <param name="input">Input string to encrypt</param> /// <param name="password">Password […]

Nodejs crypto.pbkdf2结果不同于CryptoJS.PBKDF2

我在前端(CryptoJS)和后端(Node.js)上使用PBKDF2,两个派生密钥必须相同,所以我使用相同的salt,相同的algorithm,相同的迭代次数,相同的密码,但派生的密钥是不同。 这是浏览器/ cryptoJS代码,在注释示例盐和密钥。 (hex) <script type="text/javascript" src="pbkdf2.js"></script> <script type="text/javascript" src="sha512.js"></script> <script> var salt = CryptoJS.lib.WordArray.random(128 / 8); var key512Bits = CryptoJS.PBKDF2('anacleto', salt, { hasher:CryptoJS.algo.SHA512, keySize: 512 / 32, iterations: 1 }); console.log(salt.toString(CryptoJS.enc.Hex)); // 1427f23fd32f8f9902768e7ab7c7ffad console.log(key512Bits.toString(CryptoJS.enc.Hex)); // de3259de39fcc55531b91b4ffb2a6c29005c674cc95b3ec5bdf18412b6087d05921f3a0e4148fc34c88a04e980481d397a4c2b143edc0cb1bb5d7434ca3b4c25 </script> 这是nodeJS代码 var crypto = require('crypto'); var salt_hex = '1427f23fd32f8f9902768e7ab7c7ffad'; var key_hex = 'de3259de39fcc55531b91b4ffb2a6c29005c674cc95b3ec5bdf18412b6087d05921f3a0e4148fc34c88a04e980481d397a4c2b143edc0cb1bb5d7434ca3b4c25'; var salt = new […]

crypto.pbkdf2是asynchronous的,我如何将其视为同步?

我在node.js中使用pbkdf2来散列密码。 我的问题是,我正在响应身份validation请求,我正在进行身份validation,如果传递的凭据是正确的。 我假设pbkdf2是asynchronous的,因为它可能需要大量的时间(取决于迭代的大小)。 然而,将剩余的authentication逻辑转移到一个单独的方法来利用callback看起来有点难看。 有没有比使用计时器或将所有连续validation逻辑放入单独函数更好的方法? 我知道大多数人会说我应该使用callback,但在我的使用情况下,这是没有道理的。 直到我将pbkdf2应用到传递的密码之后,我才能继续进行身份validation。

Node中密码存储的密码学最佳实践

我正在寻找一个简单,安全的解决scheme来存储用户的密码,使用节点。 我是一个密码学新手,但一直试图从网上调查一起解决scheme。 我正在寻找validation,我想出的是一个具有基本(而不是银行,医院等)安全需求的Web应用程序的可靠解决scheme。 这里是: var crypto = require('crypto'); var SALT_LENGTH = 64; var KEY_LENGTH = 64; var ITERATIONS = 1000; function createHashedPassword(plainTextPassword, cb) { crypto.randomBytes(SALT_LENGTH, function (err, salt) { console.time('password-hash'); crypto.pbkdf2(plainTextPassword, salt, ITERATIONS, KEY_LENGTH, function (err, derivedKey) { console.timeEnd('password-hash'); return cb(null, {derivedKey: derivedKey, salt: salt, iterations: ITERATIONS}); }); }); }; …以下是我所做的select, 什么哈希algorithm使用? 基于这篇广泛引用的文章 ,它看起来像领先的竞争者是PBKDF2,bcrypt和scrypt。 我select了PBKDF2,因为它已经在Node中build立了支持。 […]

使用pbkdf2的SALT和HASH

我正在使用以下方法从nodejs中的encryption库中创build一个腌制和散列的密码: crypto.randomBytes(size, [callback]) crypto.pbkdf2(password, salt, iterations, keylen, callback) 对于randomBytes调用(创buildSALT)我应该使用什么大小? 我听说过128位盐,也许高达256位。 它看起来像这个函数使用字节的大小,所以我可以假设大小为32(256位)就足够了? 对于pbkdf2调用,什么是很好的迭代次数,key(keylen)的长度是多less? 此外,对于存储,我已经看到了盐,长度,迭代和derviedkey存储在同一列的例子。 我正在使用一个例子来分隔4 :: ,即: salt::derivedKey::keyLength::iterations 这样做,我可以分开::以获得4个值,所以我可以根据提供的密码生成派生的密钥,看看它是否匹配。 这是存储这个的正确方法吗? 还是应该在结合这些价值观时多一些“欺骗”?