Validador de contraseñas completado.
This commit is contained in:
Binary file not shown.
@@ -79,6 +79,81 @@ Objetivo: Que detecte la longitud y cantidad de caracteres especiales y dará el
|
||||
```Shell
|
||||
#!/bin/bash
|
||||
# Funciones Puras
|
||||
# En caso de muchos condicionales
|
||||
# Recurrir a negaciones
|
||||
longitud() {
|
||||
local passwd=$1
|
||||
local long=${#passwd}
|
||||
if [[ "$long" -gt 8 ]]; then
|
||||
echo "PWD_GT_8"
|
||||
else
|
||||
echo "PWD_LT_8"
|
||||
fi
|
||||
}
|
||||
minusculas() {
|
||||
local passwd=$1
|
||||
if [[ "$passwd" =~ [a-z] ]]; then
|
||||
echo "MINLETTERS"
|
||||
else
|
||||
echo "NO_MINLETTERS"
|
||||
fi
|
||||
}
|
||||
mayusculas () {
|
||||
local passwd=$1
|
||||
if [[ "$passwd" =~ [A-Z] ]]; then
|
||||
echo "MAYLETTERS"
|
||||
else
|
||||
echo "NO_MAYLETTERS"
|
||||
fi
|
||||
}
|
||||
numeros () {
|
||||
local passwd=$1
|
||||
if [[ "$passwd" =~ [0-9] ]]; then
|
||||
echo "NUMBERS"
|
||||
else
|
||||
echo "NO_NUMBERS"
|
||||
fi
|
||||
}
|
||||
caracteresE () {
|
||||
local passwd=$1
|
||||
if [[ "$passwd" =~ [^a-zA-Z0-9] ]]; then #Caso curioso: Se recurre a la negacion, ya que si existe un
|
||||
#caracter especial, este no estará en las tablas de mayuscula, minuscula ni numeros.
|
||||
echo "ECARACTERS"
|
||||
else
|
||||
echo "NO_ECARACTERS"
|
||||
fi
|
||||
}
|
||||
validador () {
|
||||
local passwd=$1
|
||||
local long=$(longitud "$passwd")
|
||||
local min=$(minusculas "$passwd")
|
||||
local may=$(mayusculas "$passwd")
|
||||
local num=$(numeros "$passwd")
|
||||
local carE=$(caracteresE "$passwd")
|
||||
res=("$long" "$min" "$may" "$num" "$carE")
|
||||
local puntuacion=0
|
||||
local totcriterios=5
|
||||
|
||||
for i in "${res[@]}"; do
|
||||
if [[ $i = "PWD_GT_8" || $i = "MINLETTERS" || $i = "MAYLETTERS" || $i = "NUMBERS" || $i = "ECARACTERS" ]]; then
|
||||
((puntuacion++)) # Esto tiene un error de sintaxis aritmetica: Se esperaba un operando (el elemento de error es "+"). El error sale cuando no se introduce uno de los valores anteriores, como por ejemplo, no poner ningun simbolo.
|
||||
#Update: EUREKA! Al poner $, bash expande el valor antes de la operacion aritmetica.
|
||||
#Si la puntuacion vale 0, bash intenta ejecutar ((0++)).
|
||||
fi
|
||||
done
|
||||
((porcentaje=puntuacion * 100 / totcriterios))
|
||||
if [[ "$porcentaje" -lt 41 ]]; then
|
||||
echo "Weak"
|
||||
elif [[ "$porcentaje" -lt 71 ]]; then
|
||||
echo "Mid"
|
||||
else
|
||||
echo "Strong"
|
||||
fi
|
||||
}
|
||||
|
||||
read -p "Introduce una contraseña: " a
|
||||
resultado=$(validador "$a" )
|
||||
|
||||
```
|
||||
|
||||
Bibliografía Web:
|
||||
|
||||
@@ -21,17 +21,61 @@ minusculas() {
|
||||
}
|
||||
mayusculas () {
|
||||
local passwd=$1
|
||||
if [["$passwd" =~ [A-Z] ]]; then
|
||||
if [[ "$passwd" =~ [A-Z] ]]; then
|
||||
echo "MAYLETTERS"
|
||||
else
|
||||
echo "NO_MAYLETTERS"
|
||||
fi
|
||||
}
|
||||
numeros () {
|
||||
local passwd=$1
|
||||
if [[ "$passwd" =~ [0-9] ]]; then
|
||||
echo "NUMBERS"
|
||||
else
|
||||
echo "NO_NUMBERS"
|
||||
fi
|
||||
}
|
||||
caracteresE () {
|
||||
local passwd=$1
|
||||
if [[ "$passwd" =~ [^a-zA-Z0-9] ]]; then #Caso curioso: Se recurre a la negacion, ya que si existe un
|
||||
#caracter especial, este no estará en las tablas de mayuscula, minuscula ni numeros.
|
||||
echo "ECARACTERS"
|
||||
else
|
||||
echo "NO_ECARACTERS"
|
||||
fi
|
||||
}
|
||||
|
||||
validador () {
|
||||
local passwd=$1
|
||||
local long=$(longitud "$passwd")
|
||||
local min=$(minusculas "$passwd")
|
||||
local may=$(mayusculas "$passwd")
|
||||
local num=$(numeros "$passwd")
|
||||
local carE=$(caracteresE "$passwd")
|
||||
res=("$long" "$min" "$may" "$num" "$carE")
|
||||
local puntuacion=0
|
||||
local totcriterios=5
|
||||
|
||||
|
||||
|
||||
for i in "${res[@]}"; do
|
||||
if [[ $i = "PWD_GT_8" || $i = "MINLETTERS" || $i = "MAYLETTERS" || $i = "NUMBERS" || $i = "ECARACTERS" ]]; then
|
||||
((puntuacion++)) # Esto tiene un error de sintaxis aritmetica: Se esperaba un operando (el elemento de error es "+"). El error sale cuando no se introduce uno de los valores anteriores, como por ejemplo, no poner ningun simbolo.
|
||||
#Update: EUREKA! Al poner $, bash expande el valor antes de la operacion aritmetica.
|
||||
#Si la puntuacion vale 0, bash intenta ejecutar ((0++)).
|
||||
fi
|
||||
done
|
||||
((porcentaje=puntuacion * 100 / totcriterios))
|
||||
if [[ "$porcentaje" -lt 41 ]]; then
|
||||
echo "Weak"
|
||||
elif [[ "$porcentaje" -lt 71 ]]; then
|
||||
echo "Mid"
|
||||
else
|
||||
echo "Strong"
|
||||
fi
|
||||
}
|
||||
|
||||
read -p "Introduce una contraseña: " a
|
||||
resultado=$(validador "$a" )
|
||||
|
||||
resultado=$(longitud "$a")
|
||||
|
||||
echo "$resultado"
|
||||
echo "Su contraseña es $resultado"
|
||||
|
||||
Reference in New Issue
Block a user