- Se incorporó
- 16 Noviembre 2021
- Mensajes
- 473
Nota: no me pidan que lo cuelgue en un github
Hace rato quería hacerlo, pero me daba lata. Ahora me animé.
En circunstancias reales, lo ideal es usar '[:graph:]' en vez de '[:alnum:]', pero ciertos portales (bancarios) no permiten tener una clave decente

Bash:# Generador de claves en base a los sets de tr. # $1: Set a usar. Por defecto [:alnum:]. # $1: Largo de la clave. # $2: Cantidad de elementos a generar. function genk { # Valor por defecto para $1 kset=$1 if [[ -z $1 ]]; then kset="[:alnum:]" fi # Validación de parámetros if [[ -z $2 || -z $3 ]]; then echo "[Error]: ¡Parámetros incorrectos!" echo -e "\nParámetros:" echo "1: Set a usar. Por defecto [:alnum:]. Ver man tr." echo "2: Largo de la clave" echo "3: Cantidad de elementos a generar" else # Generación de clave alfa-numérica i=0 while (true) do p=$(< /dev/urandom tr -cd "${kset}" | head -c $2 ; echo); # Sets [:alnum:] y [:digit:][:alpha:] if [[ $kset == "[:alnum:]" || $kset == "[:digit:][:alpha:]" || $kset == "[:alpha:][:digit:]" ]] ]]; then # Solo para claves alfa-numéricas se verifica que contengan números y letras if [[ ! -z "${p//[a-zA-Z]}" && ! -z "${p//[0-9]}" ]]; then echo "$i: $p"; (( i++ )) fi # Otros sets de caracteres else echo "$i: $p"; (( i++ )) fi # Terminar la impresión if [[ $i -ge $3 ]]; then break fi done fi }
La gracia del script es que se basa en la entropía colectada por el sistema. Mas info acá. Igual lo pueden customizar y agregar sus propias chucherías.
Ejemplo de uso en .bashrc para claves de 20 y 40 caracteres usando el set graph para Gmail (teniendo cargada la función en .bashrc).
Bash:
function genkgr20 { genk "[:graph:]" 20 10; }
function genkgr40 { genk "[:graph:]" 40 10; }
Otro ejemplo para un portal bancario que acepta claves alfa-numéricas de 8 caracteres.
Bash:
function genkbank { genk "" 8 20; }
pd: No memorizo ninguna clave, porque para eso está el gestor de contraseñas.
pd2: si no saben bash, lean el libro adjunto.