Programa de sugerencia de contraseña fuerte

Dada una contraseña ingresada por el usuario, verifique su seguridad y sugiera alguna contraseña si no es segura.

Los criterios para una contraseña segura son los siguientes: 
Una contraseña es segura si tiene: 
1. Al menos 8 caracteres 
2. Al menos un carácter especial 
3. Al menos un número 
4. Al menos un carácter en mayúsculas y minúsculas. 

Ejemplos: 

Input : keshav123
Output : Suggested Password
k(eshav12G3
keshav1@A23
kesh!Aav123
ke(shav12V3
keGshav1$23
kesXhav@123
keAshav12$3
kesKhav@123
kes$hav12N3
$kesRhav123

Input :rakesh@1995kumar
Output : Your Password is Strong

Enfoque: 
verifique la seguridad de la contraseña de entrada si cumple con todos los criterios, luego es una contraseña segura; de lo contrario, verifique los caracteres ausentes y devuelva la contraseña generada aleatoriamente al usuario.  

C++

// CPP code to suggest strong password
#include <bits/stdc++.h>
 
using namespace std;
 
// adding more characters to suggest strong password
string add_more_char(string str, int need)
{
    int pos = 0;
 
    // all 26 letters
    string low_case = "abcdefghijklmnopqrstuvwxyz";
 
    for (int i = 0; i < need; i++) {
        pos = rand() % str.length();
        str.insert(pos, 1, low_case[rand() % 26]);
    }
    return str;
}
 
// make powerful string
string suggester(int l, int u, int d, int s, string str)
{
 
    // all digits
    string num = "0123456789";
 
    // all lower case, uppercase and special characters
    string low_case = "abcdefghijklmnopqrstuvwxyz";
    string up_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string spl_char = "@#$_()!";
 
    // position at which place a character
    int pos = 0;
 
    // if there is no lowercase char in input string, add it
    if (l == 0) {
        // generate random integer under string length
        pos = rand() % str.length();
 
        // generate random integer under 26 for indexing of a to z
        str.insert(pos, 1, low_case[rand() % 26]);
    }
 
    // if there is no upper case char in input string, add it
    if (u == 0) {
        pos = rand() % str.length();
        str.insert(pos, 1, up_case[rand() % 26]);
    }
 
    // if there is no digit in input string, add it
    if (d == 0) {
        pos = rand() % str.length();
        str.insert(pos, 1, num[rand() % 10]);
    }
 
    // if there is no special character in input string, add it
    if (s == 0) {
        pos = rand() % str.length();
        str.insert(pos, 1, spl_char[rand() % 7]);
    }
 
    return str;
}
 
/* make_password function :This function is used to check
strongness and if input string is not strong, it will suggest*/
void generate_password(int n, string p)
{
    // flag for lower case, upper case, special
    // characters and need of more characters
    int l = 0, u = 0, d = 0, s = 0, need = 0;
 
    // password suggestions.
    string suggest;
 
    for (int i = 0; i < n; i++) {
        // password suggestions.
        if (p[i] >= 97 && p[i] <= 122)
            l = 1;
        else if (p[i] >= 65 && p[i] <= 90)
            u = 1;
        else if (p[i] >= 48 && p[i] <= 57)
            d = 1;
        else
            s = 1;
    }
 
    // Check if input string is strong that
    // means all flag are active.
    if ((l + u + d + s) == 4) {
        cout << "Your Password is Strong" << endl;
        return;
    }
    else
        cout << "Suggested password " << endl;
 
    /*suggest 10 strong strings */
    for (int i = 0; i < 10; i++) {
        suggest = suggester(l, u, d, s, p);
        need = 8 - suggest.length();
        if (need > 0)
            suggest = add_more_char(suggest, need);
        cout << suggest << endl;
    }
}
 
// Driver code
int main()
{
    string input_string = "geek@2018";
    srand(time(NULL));
 
    // srand function set Seed for rand().
    generate_password(input_string.length(), input_string);
    return 0;
}

Java

// Java code to suggest strong password
import java.io.*;
import java.util.*;
import java.util.Random;
 
public class GFG {
 
    // adding more characters to suggest
    // strong password
    static StringBuilder add_more_char(
                        StringBuilder str, int need)
    {
        int pos = 0;
        Random randm = new Random();
         
        // all 26 letters
        String low_case = "abcdefghijklmnopqrstuvwxyz";
 
        for (int i = 0; i < need; i++) {
            pos = randm.nextInt(1000) % str.length();
            str.setCharAt(pos,low_case.charAt(
                            randm.nextInt(1000) % 26));
        }
        return str;
    }
 
    // make powerful String
    static StringBuilder suggester(int l, int u, int d,
                              int s, StringBuilder str)
    {
        Random randm = new Random();
         
        // all digits
        String num = "0123456789";
 
        // all lower case, uppercase and special
        // characters
        String low_case = "abcdefghijklmnopqrstuvwxyz";
        String up_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        String spl_char = "@#$_()!";
 
        // position at which place a character
        int pos = 0;
 
        // if there is no lowercase char in input
        // String, add it
        if (l == 0) {
             
            // generate random integer under
            // String length()
            pos = randm.nextInt(1000) % str.length();
 
            // generate random integer under 26 for
            // indexing of a to z
            str.setCharAt(pos,low_case.charAt(randm.nextInt(1000)
                                        % 26));
        }
 
        // if there is no upper case char in input
        // String, add it
        if (u == 0) {
            pos = randm.nextInt(1000) % str.length();
            str.setCharAt(pos,low_case.charAt(randm.nextInt(1000)
                                        % 26));
        }
 
        // if there is no digit in input String, add it
        if (d == 0) {
            pos = randm.nextInt(1000) % str.length();
            str.setCharAt(pos,low_case.charAt(randm.nextInt(1000)
                                        % 10));
        }
 
        // if there is no special character in input
        // String, add it
        if (s == 0) {
            pos = randm.nextInt(1000) % str.length();
            str.setCharAt(pos,low_case.charAt(randm.nextInt(1000)
                                        % 7));
        }
 
        return str;
    }
 
    /* make_password function :This function is used
    to check strongness and if input String is not
    strong, it will suggest*/
    static void generate_password(int n, StringBuilder p)
    {
         
        // flag for lower case, upper case, special
        // characters and need of more characters
        int l = 0, u = 0, d = 0, s = 0, need = 0;
 
        // password suggestions.
        StringBuilder suggest;
 
        for (int i = 0; i < n; i++) {
             
            // password suggestions.
            if (p.charAt(i) >= 97 && p.charAt(i) <= 122)
                l = 1;
            else if (p.charAt(i) >= 65 && p.charAt(i) <= 90)
                u = 1;
            else if (p.charAt(i) >= 48 && p.charAt(i) <= 57)
                d = 1;
            else
                s = 1;
        }
 
        // Check if input String is strong that
        // means all flag are active.
        if ((l + u + d + s) == 4) {
            System.out.println("Your Password is Strong");
            return;
        }
        else
            System.out.println("Suggested password ");
 
        /*suggest 10 strong Strings */
        for (int i = 0; i < 10; i++) {
            suggest = suggester(l, u, d, s, p);
            need = 8 - suggest.length();
            if (need > 0)
                suggest = add_more_char(suggest, need);
            System.out.println(suggest);;
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        StringBuilder input_String = new StringBuilder("geek@2018");
        generate_password(input_String.length(), input_String);
    }
}
 
// This code is contributed by Manish Shaw (manishshaw1)

Python3

# Python code to suggest strong password
 
import random
 
# Function to insert character in a string
# Because string is immutable in python
def insert(s, pos, ch):
        return(s[:pos] + ch + s[pos:])
         
# adding more characters to
# suggest strong password
def add_more_char(s, need):
        pos = 0
 
        # add 26 letters
        low_case = "abcdefghijklmnopqrstuvwxyz"
 
        for i in range(need):
                pos = random.randint(0, len(s)-1)
                s = insert(s, pos, low_case[random.randint(0,25)])
 
        return(s)
 
# Make powerful string
def suggester(l, u, d, s, st):
 
        # all digits
        num = '0123456789'
 
        # all lower case, upper case and special characters
        low_case = "abcdefghijklmnopqrstuvwxyz"
        up_case = low_case.upper()
        spl_char = '@#$_()!'
 
        # Position at which place a character
        pos = 0
 
        # If there is no lowercase char
        # in input string, add it
        if( l == 0 ):
           
                # Generate random integer under string length
                pos = random.randint(0,len(st)-1)
 
                # Generate random integer under 26 for indexing of a to z
                st = insert(st, pos, low_case[random.randint(0,25)])
 
        # If there is no upper case char in input string, add it
        if( u == 0 ):
           
                # Generate random integer under string length
                pos = random.randint(0,len(st)-1)
 
                # Generate random integer under 26 for indexing of A to Z
                st = insert(st, pos, up_case[random.randint(0,25)])
 
        # If there is no digit in input string, add it
        if( d == 0 ):
           
                # Generate random integer under string length
                pos = random.randint(0,len(st)-1)
 
                # Generate random integer under 10 for indexing of 0 to 9
                st = insert(st, pos, num[random.randint(0,9)])
 
        # If there is no special character
        # in input string, add it
        if( s == 0 ):
           
                # Generate random integer under string length
                pos = random.randint(0,len(st)-1)
 
                # Generate random integer under 7 for
                # indexing of special characters
                st = insert(st, pos, low_case[random.randint(0,6)])
 
        return st
 
# generate_password function : This function is used to check
# strength and if input string is not strong, It will suggest
def generate_password(n, p):
   
        # flag for lower case, upper case, special
        # characters and need of more characters
        l = 0; u = 0; d = 0; s = 0; need = 0
 
        # Password suggestions
        suggest = ''
 
        for i in range(n):
           
                # Password suggestion
                if( p[i].islower() ):
                        l = 1
                elif( p[i].isupper() ):
                        u = 1
                elif( p[i].isdigit() ):
                        d = 1
                else:
                        s = 1
 
        # Check if input string is strong that
        # means all flags are active
        if( (l + u + d + s) == 4):
                print("Your Password is Strong")
                return
        else:
                print("Suggested Passwords")
 
        # Suggest 10 strong strings
        for i in range(10):
                suggest = suggester(l, u, d, s, p)
                need = 8 - len(suggest)
 
                if(need > 0):
                        suggest = add_more_char(suggest, need)
                print(suggest)
 
 
# Driver Code
input_string = 'geek@2018'
 
generate_password( len(input_string), input_string)
 
 
# This code is contributed by Arjun Saini

C#

// C# code to suggest strong password
using System;
using System.Collections.Generic;
 
class GFG {
 
    // adding more characters to suggest
    // strong password
    static string add_more_char(string str, int need)
    {
        int pos = 0;
        Random randm = new Random();
         
        // all 26 letters
        string low_case = "abcdefghijklmnopqrstuvwxyz";
 
        for (int i = 0; i < need; i++) {
            pos = randm.Next(1,1000) % str.Length;
            str = str.Insert(pos,low_case[randm.Next(1000)
                                        % 26].ToString());
        }
        return str;
    }
 
    // make powerful string
    static string suggester(int l, int u, int d, int s,
                                             string str)
    {
        Random randm = new Random();
         
        // all digits
        string num = "0123456789";
 
        // all lower case, uppercase and special
        // characters
        string low_case = "abcdefghijklmnopqrstuvwxyz";
        string up_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        string spl_char = "@#$_()!";
 
        // position at which place a character
        int pos = 0;
 
        // if there is no lowercase char in input
        // string, add it
        if (l == 0) {
             
            // generate random integer under
            // string length
            pos = randm.Next(1,1000) % str.Length;
 
            // generate random integer under 26 for
            // indexing of a to z
            str = str.Insert(pos,low_case[randm.Next(1,
                                 1000) % 26].ToString());
        }
 
        // if there is no upper case char in input
        // string, add it
        if (u == 0) {
            pos = randm.Next(1,1000) % str.Length;
            str = str.Insert(pos,up_case[randm.Next(
                              1,1000) % 26].ToString());
        }
 
        // if there is no digit in input string, add it
        if (d == 0) {
            pos = randm.Next(1,1000) % str.Length;
            str = str.Insert(pos,num[randm.Next(1,1000)
                                      % 10].ToString());
        }
 
        // if there is no special character in input
        // string, add it
        if (s == 0) {
            pos = randm.Next(1,1000) % str.Length;
            str = str.Insert(pos,spl_char[randm.Next(
                              1,1000) % 7].ToString());
        }
 
        return str;
    }
 
    /* make_password function :This function is used
    to check strongness and if input string is not
    strong, it will suggest*/
    static void generate_password(int n, string p)
    {
         
        // flag for lower case, upper case, special
        // characters and need of more characters
        int l = 0, u = 0, d = 0, s = 0, need = 0;
 
        // password suggestions.
        string suggest;
 
        for (int i = 0; i < n; i++) {
             
            // password suggestions.
            if (p[i] >= 97 && p[i] <= 122)
                l = 1;
            else if (p[i] >= 65 && p[i] <= 90)
                u = 1;
            else if (p[i] >= 48 && p[i] <= 57)
                d = 1;
            else
                s = 1;
        }
 
        // Check if input string is strong that
        // means all flag are active.
        if ((l + u + d + s) == 4) {
            Console.WriteLine("Your Password is Strong\n");
            return;
        }
        else
            Console.WriteLine("Suggested password\n ");
 
        /*suggest 10 strong strings */
        for (int i = 0; i < 10; i++) {
            suggest = suggester(l, u, d, s, p);
            need = 8 - suggest.Length;
            if (need > 0)
                suggest = add_more_char(suggest, need);
            Console.WriteLine(suggest + "\n");;
        }
    }
 
    // Driver code
    public static void Main()
    {
        string input_string = "geek@2018";
        generate_password(input_string.Length, input_string);
    }
}
 
// This code is contributed by Manish Shaw (manishshaw1)

PHP

<?php
// php code to suggest
// strong password
 
// adding more characters to
// suggest strong password
function add_more_char( $str, $need)
{
    $pos = 0;
 
    // all 26 letters
    $low_case = "abcdefghijklmnopqrstuvwxyz";
 
    for ($i = 0; $i < $need; $i++)
    {
        $pos = rand() % strlen($str);
        $str[$pos]=$low_case[rand() % 26];
    }
    return $str;
}
 
// make powerful string
function suggester($l, $u, $d, $s, $str)
{
     
    // all digits
    $num = "0123456789";
 
    // all lower case, uppercase and
    // special characters
    $low_case = "abcdefghijklmnopqrstuvwxyz";
    $up_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     
    // $spl_char1 = "@#$_()!";
    // position at which place
    // a character
    $pos = 0;
 
    // if there is no lowercase char
    // in input string, add it
    if ($l == 0)
    {
         
        // generate random integer
        // under string length
        $pos = rand() % strlen($str);
 
        // generate random integer under
        // 26 for indexing of a to z
        $str[$pos]=$low_case[rand() % 26];
    }
 
    // if there is no upper case
    // char in input string, add it
    if ($u == 0)
    {
        $pos = rand() % strlen($str);
        $str[$pos]=$up_case[rand() % 26];
    }
 
    // if there is no digit
    // in input string, add it
    if ($d == 0) {
        $pos = rand() % strlen($str);
        $str[$pos]=$num[rand() % 10];
    }
 
    // if there is no special character
    // in input string, add it
    if ($s == 0)
    {
        $pos = rand() % strlen($str);
        $str[$pos]=$spl_char1[rand() % 7];
    }
 
    return $str;
}
 
// Make_password function : This
// function is used to check
// strongness and if input string
// is not strong, it will suggest
function generate_password($n, $p)
{
     
    // flag for lower case, upper case,
    // special characters and need
    // of more characters
    $l = 0;
    $u = 0;
    $d = 0;
    $s = 0;
    $need = 0;
 
    // password suggestions.
    $suggest;
 
    for ($i = 0; $i < $n; $i++)
    {
        // password suggestions.
        if ($p[$i] >= 97 && $p[$i] <= 122)
            $l = 1;
        else if ($p[$i] >= 65 && $p[$i] <= 90)
            $u = 1;
        else if ($p[$i] >= 48 && $p[$i] <= 57)
            $d = 1;
        else
            $s = 1;
    }
 
    // Check if input string is strong
    // that means all flag are active.
    if (($l + $u + $d + $s) == 4)
    {
        echo "Your Password is Strong.\n";
        return;
    }
    else
        echo "Suggested password";
 
    // suggest 10 strong strings
    for ($i = 0; $i < 10; $i++)
    {
        $suggest = suggester($l, $u, $d, $s, $p);
        $need = 8 - strlen($suggest);
        if ($need > 0)
            $suggest = add_more_char($suggest, $need);
        echo "\n".$suggest;
    }
}
 
    // Driver code
    $input_string = "geek@2018";
    srand(mktime(NULL));
 
    // srand function set Seed for rand().
    generate_password(strlen($input_string),
                      $input_string);
 
// This code is contributed by mits
?>
Producción: 

Suggested password 
geek@201K8
geek@201S8
gOeek@2018
geek@201N8
geek@2P018
geek@D2018
geUek@2018
geek@2Q018
geek@2F018
geekZ@2018

 

Complejidad temporal : O(n). 
 

Publicación traducida automáticamente

Artículo escrito por Rahul Kumar 12 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *