कम से कम एक घटक उत्पन्न करने के लिए मैं इस यादृच्छिक पासवर्ड जनरेटर को कैसे बना सकता हूं? वर्तमान में, ऐसा होता है कि जनरेट किए गए पासवर्ड में कोई संख्या शामिल नहीं होती है, या कोई अन्य प्रकार छूट जाता है। कम से कम प्रकारों को उत्पन्न करने के लिए इसे कैसे बनाया जाए?

        $scope.passwordLength = 12;
        $scope.addUpper       = true;
        $scope.addNumbers     = true;
        $scope.addSymbols     = true;

        $scope.createPassword = function(){
            var lowerCharacters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
            var upperCharacters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
            var numbers = ['0','1','2','3','4','5','6','7','8','9'];
            var symbols = ['!', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~'];
            var finalCharacters = lowerCharacters;
            if($scope.addUpper){
                finalCharacters = finalCharacters.concat(upperCharacters);
            }
            if($scope.addNumbers){
                finalCharacters = finalCharacters.concat(numbers);
            }
            if($scope.addSymbols){
                finalCharacters = finalCharacters.concat(symbols);
            }
            var passwordArray = [];
            for (var i = 1; i < $scope.passwordLength; i++) {
                passwordArray.push(finalCharacters[Math.floor(Math.random() * finalCharacters.length)]);
            };
            $scope.password = passwordArray.join("");
        };
2
cplus 27 जिंदा 2017, 03:07

4 जवाब

सबसे बढ़िया उत्तर

आप जो कर रहे हैं वह सभी संभावित पात्रों (finalCharacters) की सरणी बना रहा है और इसके 12 वर्ण यादृच्छिक रूप से ले रहा है।

आपको प्रत्येक आवश्यक सरणी (upperCharacters, numbers, symbols) से कम से कम एक यादृच्छिक वर्ण लेने की आवश्यकता है और इसे फेरबदल करें।

एल्गोरिदम उदाहरण:

  • निचले वर्णों की संख्या, ऊपरी वर्णों की संख्या, संख्याओं की संख्या और प्रतीकों की संख्या (यानी 3 निचला, 3 ऊपरी, 3 संख्या, 3 प्रतीक) उत्पन्न करना
  • प्रत्येक सरणी (lowerCharacters, upperCharacters, ...) से यादृच्छिक वर्णों की उचित संख्या को सरणी में धकेलें (अर्थात passwordArray)
  • फेरबदल passwordArray
  • शामिल हों passwordArray

पहला कदम हो सकता है:

  • noOfLowerCharacters = 0, noOfUpperCharacters = 0, noOfUpperCharacters = 0
  • आवश्यक प्रकारों की संख्या गिनें (1, 2 या 3)। इसे वेरिएबल noOfneededTypes में स्टोर करें।
  • यादृच्छिक संख्या 1 से लेकर (passwordLength - noOfneededTypes) तक लें। इसे वेरिएबल noOfLowerCharacters में स्टोर करें।
  • usedTypeCounter बनाएं। मान को 1 पर सेट करें
  • अगर addUpper तो 1 से लेकर (passwordLength - noOfneededTypes + usedTypeCounter - noOfLowerCharacters) तक की रेंज से रैंडम नंबर लें। इसे वेरिएबल noOfUpperCharacters में स्टोर करें। बढ़ाएँ usedTypeCounter
  • अगर addNumbers तो 1 से लेकर (passwordLength - noOfneededTypes + usedTypeCounter - noOfLowerCharacters - noOfUpperCharacters) तक की रेंज से रैंडम नंबर लें। . इसे वेरिएबल noOfNumbers में स्टोर करें।
  • अगर addSymbols तो noOfSymbols = passwordLength - noOfLowerCharacters - noOfUpperCharacters - noOfNumbers

कार्यान्वयन का उदाहरण:

  $scope.passwordLength = 12;
  $scope.addUpper = true;
  $scope.addNumbers = true;
  $scope.addSymbols = true;

  function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
  }

  // shuffle function taken from http://stackoverflow.com/a/12646864/4989081
  function shuffleArray(array) {
    for (var i = array.length - 1; i > 0; i--) {
      var j = Math.floor(Math.random() * (i + 1));
      var temp = array[i];
      array[i] = array[j];
      array[j] = temp;
    }
    return array;
  }

  $scope.createPassword = function() {
    var lowerCharacters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
    var upperCharacters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
    var numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    var symbols = ['!', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~'];

var noOfLowerCharacters = 0,
  noOfUpperCharacters = 0,
  noOfNumbers = 0,
  noOfSymbols = 0;

var noOfneededTypes = $scope.addUpper + $scope.addNumbers + $scope.addSymbols;

var noOfLowerCharacters = getRandomInt(1, $scope.passwordLength - noOfneededTypes);

var usedTypeCounter = 1;

if ($scope.addUpper) {
  noOfUpperCharacters = getRandomInt(1, $scope.passwordLength - noOfneededTypes + usedTypeCounter - noOfLowerCharacters);
  usedTypeCounter++;
}

if ($scope.addNumbers) {
  noOfNumbers = getRandomInt(1, $scope.passwordLength - noOfneededTypes + usedTypeCounter - noOfLowerCharacters - noOfUpperCharacters);
  usedTypeCounter++;
}

if ($scope.addSymbols) {
  noOfSymbols = $scope.passwordLength - noOfLowerCharacters - noOfUpperCharacters - noOfNumbers;
}

var passwordArray = [];

for (var i = 0; i < noOfLowerCharacters; i++) {
  passwordArray.push(lowerCharacters[getRandomInt(1, lowerCharacters.length - 1)]);
}

for (var i = 0; i < noOfUpperCharacters; i++) {
  passwordArray.push(upperCharacters[getRandomInt(1, upperCharacters.length - 1)]);
}

for (var i = 0; i < noOfNumbers; i++) {
  passwordArray.push(numbers[getRandomInt(1, numbers.length - 1)]);
}

for (var i = 0; i < noOfSymbols; i++) {
  passwordArray.push(symbols[getRandomInt(1, symbols.length - 1)]);
}

passwordArray = shuffleArray(passwordArray);

return passwordArray.join("");
};

$scope.password = $scope.createPassword();

काम करते हुए देखें: http://jsfiddle.net/cmoqkkw8/

6
Łukasz 27 जिंदा 2017, 11:40

आप यादृच्छिक पासवर्ड भी बना सकते हैं जब तक कि उनमें से कोई एक आपके मानदंड से मेल नहीं खाता:

function randomPass (length, addUpper, addSymbols, addNums) {
    var lower = "abcdefghijklmnopqrstuvwxyz";
    var upper = addUpper ? lower.toUpperCase() : "";
    var nums = addNums ? "0123456789" : "";
    var symbols = addSymbols ? "!#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~" : "";

    var all = lower + upper + nums + symbols;
    while (true) {
        var pass = "";
        for (var i=0; i<length; i++) {
            pass += all[Math.random() * all.length | 0];
        }

        // criteria:
        if (!/[a-z]/.test(pass)) continue; // lowercase is a must
        if (addUpper && !/[A-Z]/.test(pass)) continue; // check uppercase
        if (addSymbols && !/\W/.test(pass)) continue; // check symbols
        if (addNums && !/\d/.test(pass)) continue; // check nums

        return pass; // all good
    }
}
2
Washington Guedes 27 जिंदा 2017, 04:19

कुछ ऐसा ही ओपन सोर्स जेएस उपयोग पर पहले से ही किया जा चुका है - दूसरों की मदद कर सकता है

Passutil.js

इसका उपयोग इस साइट पर किया जा रहा है

2
software.wikipedia 31 जिंदा 2017, 23:49