Inicio > Informática, Software > Numerador: creador de vectores.

Numerador: creador de vectores.

Hacía mucho tiempo que no programaba nada en serio, pero en la época de exámenes siempre está uno más inspirado y ahora que por fin lo he terminado, lo publico :p

La idea principal era la de programar un script que fabricase diccionarios para luego utilizarlos para romper contraseñas, pero para ello he escrito este programita que es en sí mismo la base del creador de diccionarios.

La finalidad de este script escrito en BASH es obtener todos los vectores posibles del número de columnas que deseemos. Lo hace de forma secuencial hasta alcanzar el valor límite en cada una de las columnas por orden, desde la primera a la última.

El código es el siguiente:

 

#!/bin/bash
#
# Numerador. Crea vectores de $k componentes con números de hasta $l.

r=0	# Aquí almacenaremos el valor leido de la columna que sea.
k=15	# Número máximo de columnas
l=2	# Límite que el número puede alcanzar en una columna cualquiera.
	# ¡Ojo, el 0 cuenta como el primer número.!
c=0	# Columna en la que nos encontramos.
c0=0	# Columna de seguridad (para cuando se llenan columnas).
x=0	# Contador de seguridad, para no sobreescribir la columna de seguridad.
declare array[$k]	# Diría que esto es innecesario en este lenguaje.

# Definimos las funciones que vamos a necesitar:

function Asegurar(){	
# Con esta función nos aseguraremos de no sobreescribir la columna
# de seguridad. Puede que esta funcion sea prescindible.
if test $x -eq 0; then
c0=$(($c))
x=1
fi
}

function Limite(){
# Con esta función se comprueba si el número de la columna
# en la que estamos, ha llegado o no a su límite.

if test $r -eq $l; then
# La columna ha llegado a su limite.

# Llamamos a la función Asegurar para asegurar la posición.
Asegurar
# Pasamos a sumar uno a la siguiente columna llamando a la funcion Unidad.
Unidad
else
# Volvemos a la posición de seguridad.
c=$(($c0))
# Reiniciamos el contador de seguridad.
x=0

fi
}

function Verificar(){
# Verificamos si hemos rellenado todas las columnas

kk=${#array[@]} # Nos da el número de columnas que,
		#por ahora, lleva nuestro array

if [ ${array[$(($kk-1))]} -eq $(($l)) ]; then
# Este ciclo if verifica si la última columna ya llegado al límite.
    if test $kk == $k; then
    # Este ciclo if verifica si hemos alcanzado el límite de columnas.
    break
    fi
fi
}

function Unidad(){
# Esta función es para sumar 1 a la columna que sea.

# Llamamos a la función Verificar para ver si hemos acabado :p
Verificar

# Lo ponemos a 0
array[$c]=0
# Pasamos a la siguiente columna
c=$(($c+1))
# Leemos el valor
r=${array[$c]}
# Sumamos 1
r=$(($r+1))
# Escribimos el valor
array[$c]=$r
Limite
}

# Ya hemos definido todas las funciones que necesitábamos.

# Ahora empieza el ciclo principal del programa.

while test $k == $k; do
# Leemos el valor
r=${array[$c]}

# Sumamos 1 a la variable.
r=$(($r+1))

# Escribimos el valor de la variable de nuevo en el array.
array[$c]=$r

# Llamamos a la función limite, para que compruebe si hemos
# llegado al limite de la columna
Limite

# Esto es para mostrar en el shell la salida del programa.
# Igualmente es la salida que se desvía a un archivo
# externo para almacenar los vectores.
echo Columnas ${array[*]} #>> prueba
done

 

El código no está para nada optimizado (hay cosas que creo que sobran y otras que se podrían optimizar :p), pero funciona, que es lo importante. No utiliza ninguna programa externo (sólo BASH) por lo que se puede ejecutar perfectamente en cualquier sistema Linux (¿y puede que Unix y Mac OS?).

Probablemente, BASH no sea el lenguaje más rápido para esta tarea, pero a día de hoy no se ningún otro.

Espero que le sirva a alguien y que se ahorre un ratillo de programar jeje.

Y por supuesto quien quiera lo puede utilizar, modificar o lo que sea, siempre que respete mi autoría.

 

¡Un saludo! :d

About these ads
Categorías:Informática, Software Etiquetas: , , , ,
  1. 28 febrero 2011 en 4:07 pm | #1

    Para el futuro quedan poder leer las opciones desde la entrada como en cualquier otro comando del terminal de linux, cambiar el ciclo While por un For (que es el que debería ir ahí) y optimizar un poco el programilla :p

  1. 2 marzo 2011 en 4:10 pm | #1
  2. 2 marzo 2011 en 4:10 pm | #2

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d bloggers like this: