Generador de contraseñas fáciles de recordar [ Bash ]
Este código lee una página aleatoria de la Wikipedia y monta una contraseña a partir de las iniciales de las primeras palabras (aún soy muy torpe con bash, así que si encuentras algo que no se debería hacer así no dudes en avisar):
!/usr/bin/env bash
Escrito por kenkeiras bajo la WTFPL
chars=13 # Número de caracteres en la contraseña
Aquí va la url que te redirige a una página aleatoria
url="http://es.wikipedia.org/wiki/Especial:Aleatoria"
Se pide la página
text=wget "$url" -O -
lines=""
Se toman las líneas con
, elinimando las etiquetas
sustituyendo los espacios por "<" para que no los separe
for i in echo "$text"|grep "<p>"|sed "s/<[^>]*>//g"|sed "s/\ /</g"
;do
# Se reincorporan los espacios y se eliminan los corchetes
lines=echo $lines;echo "$i"|sed "s/\[[^\]]\]//g"|sed "s/</\ /g"
done
Se leen solo el número de palabras seleccionado
x=0
words=""
for i in $lines;do
if [ $x -ge $chars ];then
break
fi
words=`echo $words;echo $i`
x=$(( $x + 1 ))
done
Se muestran las iniciales coloreadas
echo $words|sed "s/^./\0\o033[0m/g"|sed "s/^/\o033[0;31m/g"|sed "s/\ ./\0\o033 [0m/g"|sed "s/\ /\ \o033[0;31m/g"
Se muestra la contraseña obtenida
echo $words|grep -o '\ .|^.'|tr '\n ' ' '|sed "s/\ //g"
Y se deja el espacio
echo ""
El funcionamiento es el siguiente:
Se toma una página aleatoria (para eso la url adecuada se tuvo que introducir
en $url)
text=wget "$url" -O -
Se filtra para obtener las líneas con
, es decir, las que tienen texto: echo "$text"|grep "
"
Se elimina todo las etiquetas, todo lo que haya entre cada par < y >, ambos incluidos sed "s/<[^>]*>//g"
Y se sustituyen los espacios por < (ya que sabemos que no quedan y algo hace falta para que el grep no los corte) sed "s/\ /</g"
Una vez tenemos los párrafos listos, eliminamos las referencias (entre [ y ])
y se restauran los espacios
echo "$i"|sed "s/\[[^\]]\]//g"|sed "s/</\ /g"
El for que sigue va leyendo el resultado cortado por los espacios y se detiene cuando el contador $x llega al valor definido $chars.
Después se toma lo que se convertirá en contraseña y se encierran las primeras letras entre códigos de color (en_el_wiki_de_Arch_Linux_hay_una lista) echo $words|sed "s/^./\0\o033[0m/g"|sed "s/^/\o033[0;31m/g"|sed "s/\ ./\0\o033 [0m/g"|sed "s/\ /\ \o033[0;31m/g"
Y por último, para mostrar la contraseña, se elimina todo excepto la primera letra de cada palabra: echo $words|grep -o '\ .|^.'
Se sustituyen los saltos de línea por espacios ( si, el espacio en el primer conjunto está de más :S ) tr '\n ' ' '
Y se eliminan los espacios sed "s/\ //g"
Y eso es todo, por la sombra