Skip to content

Instantly share code, notes, and snippets.

@rjmacarthy
Last active March 2, 2017 09:12
Show Gist options
  • Save rjmacarthy/7a8cbb444ccaeba683b6205de74862b5 to your computer and use it in GitHub Desktop.
Save rjmacarthy/7a8cbb444ccaeba683b6205de74862b5 to your computer and use it in GitHub Desktop.
Bcrypt work factor testing
var bcrypt = require('bcrypt');
var moment = require('moment');
var _ = require('lodash');
var randomstring = require("randomstring");
var colors = require('colors');
var times = 5;
var i = 0;
var workFactor = 10;
test(randomPassword(), i, workFactor);
function test(pass, i, workFactor) {
var now = moment();
bcrypt.hash(pass, workFactor, function(err, hash) {
var then = moment();
loghash(workFactor, moment.duration(then.diff(now))._data, pass);
decrypt(pass, hash, workFactor, i);
});
}
function decrypt(pass, hash, workFactor, i) {
var now = moment();
if (i <= times) {
bcrypt.compare(pass, hash, function(err, res) {
var then = moment();
logdecrypt(workFactor, moment.duration(then.diff(now))._data, res);
_.delay(function() {
i++;
test(randomPassword(), i, workFactor);
}, moment.duration(then.diff(now))._data.milliseconds + 500);
});
} else {
upFactor = workFactor + 1;
console.log('------------- Upping factor'.red);
test(randomPassword(), 0, upFactor);
}
}
function loghash(workFactor, time, password) {
console.log('Hash ' + time.seconds + ' seconds. At work factor ' + workFactor + ', with password ' + password);
}
function logdecrypt(workFactor, time, password) {
console.log('Decrypt ' + time.seconds + ' seconds. At work factor ' + workFactor);
console.log('-------------');
}
function randomPassword() {
return randomstring.generate(Math.floor(Math.random() * 50) + 5);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment