securitykey
Version:
A package to generate variable length security key
67 lines (56 loc) • 2.11 kB
JavaScript
const uuidv4 = require('uuid/v4');
function generateKey(minLength, maxLength) {
let raw = getRawBits(minLength, maxLength);
console.log('raw bits', raw);
// define random (1-5) bit to be replaced by random special character
let specialBitLength = getRandomNumber(1, 5);
console.log('will replace', specialBitLength, 'special characters');
return replaceRandomSpecialCharacters(raw, specialBitLength);
}
/**
* sub string random (10-20) bit
* @returns {string}
*/
function getRawBits(minLength, maxLength) {
let guid = uuidv4();
let shortGuid = guid.toString().replace(new RegExp(/-/, 'g'), '');
console.log('from guid', shortGuid);
let bitLength = getRandomNumber(minLength, maxLength);
console.log(`bit length (${minLength}-${maxLength}):`, bitLength);
let bitStart = getRandomNumber(0, shortGuid.length - bitLength);
console.log('bit start:', bitStart);
return shortGuid.substr(bitStart, bitLength);
}
function replaceRandomSpecialCharacters(str, specialBitLength) {
while (specialBitLength > 0) {
let index = getRandomNumber(0, str.length);
let specialChar = getRandomSpecialCharacter();
console.log('replace char at:', index, 'to char', specialChar);
str = str.replaceAt(index, specialChar);
specialBitLength = specialBitLength - 1;
}
return str;
}
function getRandomSpecialCharacter() {
let specialCharacters = "!@#$%^&*()_+{}|~`';:-=[]/?"
let index = getRandomNumber(0, specialCharacters.length);
return specialCharacters.charAt(index);
}
String.prototype.replaceAt = function (index, replacement) {
return this.substr(0, index) + replacement + this.substr(index + replacement.length);
}
function getRandomNumber(min, max) {
return Math.round(Math.random() * (max - min)) + min;
}
// let length = 12;
// let keys = [];
// while (length > 0) {
// console.log();
// console.log('new key: ');
// let key = generateKey(10, 20);
// console.log(key);
// keys.push(key);
// length = length - 1;
// }
// console.log(keys);
module.exports = generateKey;