From 296a9644c4ebba793b745815e88b3f2e4c805c55 Mon Sep 17 00:00:00 2001 From: Lil-Carpi Date: Sun, 14 Dec 2025 01:36:11 +0100 Subject: [PATCH] =?UTF-8?q?Validador=20de=20contrase=C3=B1as=20completado.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .obsidian/workspace.json | 28 +++---- .../.validador_de_contraseñas.sh.swp | Bin 0 -> 12288 bytes .../Ejercicios/Ejercicios - Funciones puras.md | 75 ++++++++++++++++++ .../Ejercicios/validador_de_contraseñas.sh | 52 +++++++++++- 4 files changed, 136 insertions(+), 19 deletions(-) create mode 100644 Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/.validador_de_contraseñas.sh.swp diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index af1bf44..126baa0 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,12 +13,12 @@ "state": { "type": "markdown", "state": { - "file": "BDD/SQL/Disparadores.md", - "mode": "source", + "file": "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md", + "mode": "preview", "source": false }, "icon": "lucide-file", - "title": "Disparadores" + "title": "Ejercicios - Funciones puras" } }, { @@ -27,16 +27,15 @@ "state": { "type": "markdown", "state": { - "file": "README.md", + "file": "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Extra.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "README" + "title": "Extra" } } - ], - "currentTab": 1 + ] } ], "direction": "vertical" @@ -237,10 +236,15 @@ "obsidian-git:Open Git source control": false } }, - "active": "620cc3e7430b0ac1", + "active": "34eecf2b06cedd2e", "lastOpenFiles": [ - "Documentación personal/Mecanica de Unix/Mecánica Unix - Manejo de la shell.md", + "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Extra.md", + "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh~", + "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md", + "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/test", "BDD/SQL/Disparadores.md", + "README.md", + "Documentación personal/Mecanica de Unix/Mecánica Unix - Manejo de la shell.md", "BDD/SQL/Lenguaje de definición de datos (DDL).md", "BDD/SQL/Lenguaje de Manupulación de Datos (DML).md", "BDD/SQL/Procedimientos almacenados.md", @@ -248,10 +252,8 @@ "BDD/SQL/SQL.md", "BDD/SQL/Sintaxis (Keywords).md", "BDD/SQL/Importación y exportación de base de datos.md", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md", "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Funciones puras.md", "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Arrays asociativos.md", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Extra.md", "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh", "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/verificador-de-", "BDD/SQL/Diario/Clase 4 de diciembre.md", @@ -268,13 +270,9 @@ "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Procesos hijos y paralelismo.md", "conflict-files-obsidian-git.md", "Programación/PHP/PHP", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Trampas (traps).md", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Señales.md", "Documentación personal/Mecanica de Unix/Sin nombre", "Servidores/M5/Actividades", "Servidores/M5/Actividades/RA2", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/calculadora_modular.sh", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios", "Documentación personal/Seguridad-Informatica/Vista General 1.canvas", "Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/specops.svg", "Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/satan.png", diff --git a/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/.validador_de_contraseñas.sh.swp b/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/.validador_de_contraseñas.sh.swp new file mode 100644 index 0000000000000000000000000000000000000000..4c1b28ed9642f3cfb8c29830fceb36f0085ec498 GIT binary patch literal 12288 zcmeI2zi%8x6vrnN0p|xlk{~E3UiMtvVV~~|L2(=%$|bp=2-^hzzy#x1WtW9M?$J~_bMn-ur_vP)+6}3cUwBli9T=-l`pHm=cM#;6x@DLs4W`(BwNVa0B zmZ^S@tBX9)l@p2brB=dFD~Y(NG*(6AOLUpaIUdRYHqk;L7JRK@+!wb$<7UXLY!$b= z?-Y3G6-eTx^2l!X;tRu7yOx5tpZ4yVdFYqr7T^?c3OEIv0!{&^fK$LJ;1qBQ{C5T7 z);4wx=8vood40Xz*3+(kb&XTNDc}@v3OEIv0!{&^fK$LJ;1qBQI0c*n51|4)U~FtV zW49hf@c8||{r~^(PcZfq_!8U#AA$El6O4faU;yj|yTA_c&*O~!3cdoLg6rU2a1pG5 z6)+8kz&@}O+}({a;Ae0Ld=0LH55apN0%w5)Z-V3Chh2=F2aDh|sDn{30uF*A*az<)9^3%u!74Zc4uAph9C#Y+ z1$)46(C|C(EwFmt03U!eU>>{;+~pK-3OEIv0{?#ngb@CUCT}XCu8K24d0KxYOcKVZ zNAvKCv!Cy0+3s(*TYIuzYyHK%;ElX~?okQT@PNuK@=l`oO$UiDC{euI-za&+8N0#= z*OFv?>yyGkISIlDVJz&4imL>&%n?!l`gpO{;tDm2A|&|L5pg&)wrUZRYLqi(F>?gk6fp`KGsjq49*~`m3e+&M zrdSHBAWBhuY`ihU}@m)ODltU~1L08$N19 zuRpZA0X~~jr47Ge8!Ku#XJIe9<<@=v;duHVN!S#F(gbre3|;OR~>9Rjl_^gRmHyc*uU((5$gZ| literal 0 HcmV?d00001 diff --git a/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md b/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md index 6fcd2a0..1e89e0c 100644 --- a/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md +++ b/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md @@ -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: diff --git a/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh b/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh index e6ed6c0..52a7a6c 100755 --- a/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh +++ b/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh @@ -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"