随机化char数组以显示随机密码

时间:2017-02-08 11:58:03

标签: c++ algorithm passwords

我的任务是创建一个为用户生成安全密码的解决方案。 我需要......

  1. 提示用户输入密码的长度,数量 特殊字符以及数字。

    然后应使用这些输入随机生成密码。

  2. 例如输出:

    密码长度是多少? 8

    有多少特殊字符? 2

    多少个号码? 2

    您的密码是: AUN2 $ 1S#

    我的编程水平处于初学阶段,这是迄今为止我所做的事情的例子

    var x = document.querySelectorAll('[id^="entryField"]'),
        empty = 0;
    
    for (var i = 0; i < x.length; ++i) {
        if (x[i].value == "") {
            ++empty;
        }
    }
    if (empty !== 0 && empty !== x.length) {
        alert("Please enter a value");
    }
    

3 个答案:

答案 0 :(得分:1)

引入了sample您想要使用的random_shuffle以及password生成的random_device rd; mt19937 g(rd()); auto it = sample(cbegin(alphaBetArray), cend(alphaBetArray), begin(password), numberOfLetters, g); it = sample(cbegin(specCharArray), cend(specCharArray), it, s, g); sample(cbegin(numberArray), cend(numberArray), it, n, g);

random_shuffle

Live Example

一对夫妇注意到:

  1. 你的数组并不全面,写一个lambda来随机生成一个范围内的字符可能是一个更好的选择,你可以使用generate_n来实现。
  2. @PostConstruct已在[{3}}中弃用,您现在需要使用

答案 1 :(得分:0)

您“只是”错过了随机生成部分,您可以通过rand函数获取该部分。 所以在你的情况下将是:

for (int i=0; i<numberOfLetters; i++)
    password += alphaBetArray[rand()%sizeof(alphaBetArray)];
for (int i=0; i<s; i++)
    password += specCharArray[rand()%sizeof(specCharArray)];
for (int i=0; i<n; i++)
    password += numberArray[rand()%sizeof(numberArray)];

请务必检查输入中的特殊字符和数字的总和,现在您只需检查单个条目,但有人可以输入:10(密码长度),6(特殊字符),7(数字),这是坏。

答案 2 :(得分:0)

  1. 生成p随机字符

  2. 生成特殊字符

  3. 生成n个随机数

  4. 连接它们并随机播放

  5. string workout_pass(int p, int s, int n)
    {
      string password;
    
      const char alphaBetArray[26] = {'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'};
      const char specCharArray[10] = {'!','£','$','%','&','@','~','#','>','<'};
      const char numberArray[10] = {'1','2','3','4','5','6','7','8','9','10'};
    
    
      int numberOfLetters = p - s - n;
    
      for (i = 0 ; i < numberOfLetters; ++i ) {
        password += alphaBetArray[rand() % 26];
      }
    
      for (i = 0 ; i < s; ++i ) {
        password += specCharArray[rand() % 10];
      }
    
      for (i = 0 ; i < n; ++i ) {
        password += numberArray[rand() % 10];
      }
    
      random_shuffle(password.begin(), password.end());
    
      return password;  
    }
    

    一些意见:

    1. 因为它是一个函数,所以最好不要使用CamelCase
    2. 因为它是一个函数,所以最好返回生成的字符串而不是void
    3. 尝试摆脱char数组并使用ascii数字(例如97 +(rand()%26))[a-z]
    4. 最后但并非最不重要的是更好地使用C来解决这些问题而不是像random_shuffle这样的C ++ / STL函数并试图获得相同的结果,你会学到最好的方式