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

untagged

Algoritmo de factorización casero » « Cambiar el motor de búsqueda de Firefox [tip]