function hasStringSimilarCharacters (string) {
for (var characterIndex in string) {
if (
characterIndex > 0 &&
string[characterIndex] === string[characterIndex - 1]
) {
return true;
}
}
return false;
}
function bruteForce (parameters) {
var currentPassword = parameters.startPasswordPrefix || '';
var filterSimilarCharacters = parameters.filterSimilarCharacters || false;
var totalPasswordLength = parameters.totalPasswordLength;
var charactersThatCanBeInPassword = parameters.charactersThatCanBeInPassword;
var doOnEveryStep = parameters.doOnEveryStep;
var doOnEnd = parameters.doOnEnd;
if (
doOnEveryStep &&
currentPassword.length <= totalPasswordLength
) {
doOnEveryStep(currentPassword);
}
if (currentPassword.length >= totalPasswordLength) {
return [currentPassword];
}
var passwords = [currentPassword];
for (var characterIndex in charactersThatCanBeInPassword) {
var nextPassword = currentPassword + charactersThatCanBeInPassword[characterIndex];
if (filterSimilarCharacters && hasStringSimilarCharacters(nextPassword)) {
continue;
}
var nextParameters = {
totalPasswordLength: totalPasswordLength,
startPasswordPrefix: nextPassword,
charactersThatCanBeInPassword: charactersThatCanBeInPassword,
filterSimilarCharacters: filterSimilarCharacters,
doOnEveryStep: doOnEveryStep
};
passwords = passwords.concat(bruteForce(nextParameters));
}
if (doOnEnd) {
doOnEnd(passwords);
}
return passwords;
}
function isPasswordCorrect (password) {
if (password === 'MyPassWord12') {
return true;
} else {
return false;
}
}
var startPasswordPrefix = 'MyPassWord';
var allPasswords = bruteForce({
totalPasswordLength: startPasswordPrefix.length + 2,
startPasswordPrefix: startPasswordPrefix,
charactersThatCanBeInPassword: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
doOnEveryStep: function (password) {
if (isPasswordCorrect(password)) {
console.log('Correct password: ' + password);
}
}
});
console.log(allPasswords);