Generador de claves WPA y WPA2 en Java

Escrito por Sergio De Luz
Java

Os presentamos un programa en Java recién salido del horno. Actualmente en RedesZone tenemos un generador de claves para hacerlo con Microsoft Office, y también una URL que te lo genera online.

En ocasiones, puede que no tengamos Microsoft Office instalado (usuarios de Linux) o puede que no tengamos conexión a internet o la web citada esté de mantenimiento.

Por todo ello, hemos creado un programa en Java para ejecutarlo localmente (.JAR) y de esta forma tenerlo disponible siempre que tengamos Java instalado en nuestros equipos.

A continuación, os mostramos capturas de pantalla y su funcionamiento.

Este programa está hecho íntegramente con NetBeans 7.1 y todo lo que sabemos de Java gracias a nuestro particular Curso de Java Online. Sirve para generar una clave WPA muy robusta frente a ataques de diccionario y fuerza bruta, de tal forma que nuestra red sea muy difícil de hackear.

La interfaz es muy sencilla como podéis ver en la siguiente foto:

Basta con introducir la longitud de la clave WPA o WPA2 que queramos, debemos tener en cuenta la “nota” del programa, ya que deberemos meter un número entre 8 y 63 ya que como mínimo debemos tener 8 caracteres en una clave WPA y como máximo 63 caracteres.

Modo de funcionamiento

  • Introducimos la longitud de la clave, y pinchamos en el botón de “Generar la clave ahora”, nos aparecerá la clave generada.
  • Hemos introducido una funcionalidad extra, y es que la clave se guarda en un fichero de texto, de esta forma podremos ponerla en los demás equipos y no tenemos que copiarla nosotros mismos en un fichero de texto… el programa lo hará automáticamente.
  •  Si no nos gusta la clave generada aleatoriamente, pulsamos otra vez y nos generará una nueva clave y sobreescribirá el fichero de texto que hemos creado anteriormente.

Instrucciones para ejecutar el programa

Windows:

  • Doble click sobre el archivo .JAR y se abrirá automáticamente la interfaz, si no se abre, debemos hacerlo a través de la consola.
  •  Abrimos el cmd (símbolo del sistema) y ponemos: java -jar “Ruta del archivo”. Ejemplo: java -jar “C:GeneradorWPA_RedesZone.jar”

Linux:

  • A través de la consola ponemos java -jar ruta/GeneradorWPA_RedesZone.jar

Errores

  • Como todo programa, puede contener errores, hemos probado esta sencilla aplicación y en principio todos los errores que se nos pueden presentar están controlados.
  • Si no introducimos ningún número (entero) o introducimos letras nos saldrá un mensaje de error y nos dará la oportunidad de volver a introducir un número entero.
  • Si introducimos un número menos de 8 y mayor de 63 nos lanzará un error diciendo que no se puede, y pondremos por defecto el número máximo si te has pasado, o el número mínimo si no has llegado.

Descarga del programa y código fuente de la aplicación

Ya está bien de tanta palabrería, aquí tenéis el programa .JAR:

Descargar generador de claves WPA y WPA2

Descargar proyecto de NetBeans del generador de claves

A continuación, os copio las líneas de código principales del programa para que le echéis un vistazo rápido.

Programa principal Main.java:


package generador;

/*
* Este programa ha sido realizado por Sergio de Luz (Bron) para www.redeszone.net
*/

public class Main {

public static void main(String[] args) {
Interfaz nuevoGen = new Interfaz();
nuevoGen.setVisible(true);
}

}

Interfaz Interfaz.java:


private static String cadena = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,;.:-_{}[]*+-/¿¡?'=)(%#@|!";

private void jGenerarActionPerformed(java.awt.event.ActionEvent evt) {

//Borramos la clave anterior

jClave.setText("");

//Empezamos a generar la nueva

//Tratamiento de la entrada.

try {
int numCaracteres = Integer.parseInt(jNumCaracter.getText());
if (numCaracteres < 8) { JOptionPane.showMessageDialog(this, "ERROR: El número mínimo de caracteres en WPA y WPA2 es de 8, introduce un número igual o mayor a 8", "Error en la entrada de datos", JOptionPane.ERROR_MESSAGE); jNumCaracter.setText("8"); } else if (numCaracteres > 63) {
JOptionPane.showMessageDialog(this, "ERROR: El número máximo de caracteres en WPA y WPA2 es de 63, introduce un número igual o menor a 63", "Error en la entrada de datos", JOptionPane.ERROR_MESSAGE);
jNumCaracter.setText("63");
} else {
BufferedWriter bw = new BufferedWriter(new FileWriter("clave_wpa.txt"));

//Declaramos las variables necesarias

int longitudCad = cadena.length();

String clave = "";
String caracter = "";

/*
*Bucle para el número de caracteres, dentro tenemos la función Math.random
*/para elegir el caracter aleatorio y a continuación meterlos en el String clave.

for (int i = 0; i < numCaracteres; i++) {
int numero = (int) (Math.random() * (longitudCad));
caracter = cadena.substring(numero, numero + 1);
clave = clave + caracter;
}

//Ponemos la clave generada en el cuadro de texto y en el fichero de texto.

jClave.setText(clave);
bw.write(clave);
bw.flush();
bw.close();
}

//Controlamos las excepciones que se pudieran producir.

} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(this, "Error: No has introducido un número entero en "Número de caracteres"", "Error en la entrada de datos", JOptionPane.ERROR_MESSAGE);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error: "+e,"Erro", JOptionPane.ERROR_MESSAGE);
}
}

Comentarios

  •  Se admiten comentarios y opiniones sobre el programita.
  • Se admiten ideas para ampliar la funcionalidad del programa… ¿Qué os gustaría que tuviera más?

Dejadnos vuestro comentario, nos anima a hacer este tipo de cosas!!


Noticias relacionadas

Comentarios


22 comentarios
  1. MotorOK 14 Feb, 12 11:47

    Gracias, hasta ahora utilizaba una macro en word para este cometido.

    Responder
    0
  2. indignado 14 Feb, 12 11:53

    La verdad es que me parece muy bien que hayas aprendido algo de Java y quieras mostrar lo que sabes, pero sinceramente me parece bastante inútil, lo siento, pero me parece que hacer uso de un portal para esto…

    Últimamente os lucís con el contenido que publicáis… Que salga en “redeszone” pues todavía vale… pero hacerlo portada de adslzone… pues no me parece oportuno.

    Si queréis algo de más utilida, aquí lo tenéis, en HTML con Javascript, que no necesita máquina virtual de Java ni nada…

    http://pastebin.com/vK1XCT7y

    Responder
    0
    1. Adrián Crespo 14 Feb, 12 12:16

      por esa regla de tres tampoco puede aparecer nada en ADSLzone que esté relacionado con TVzone o LINUXzone, no?

      A ti te puede parecer inútil, pero seguramente a otros muchos usuarios que no saben como crear claves WPA les será útil.

      Y no se cómo lo verás, pero hoy en día Java esta en todas las cosas, por lo tanto esto es igual de útil o más que el que tu nos has puesto, por el simple echo de haberlo tenido que programar, lo que implica su tiempo.

      Responder
      0
    2. Sergio De Luz 14 Feb, 12 12:31

      Son herramientas útiles para redes, que cada uno elija 🙂 Personalmente usaré ésta que he creado yo y sé qué simbolos tiene, que esa otra que no tiene símbolos por ejemplo (aunque se le podría poner claro 🙂 ).

      Este es nuestro punto de vista… un jar compatible con todos los sistemas operativos 🙂

      Responder
      0
    3. lucas 14 Feb, 12 12:36

      lo peor es k hayas gastado tu tiempo en escribir criticando la noticia con lo listo que eres que tienes con javascritp

      Responder
      0
  3. Blom_xurry 14 Feb, 12 11:56

    Bueno pues a ver algun cambio o mejora. Ya que que el programa indica que las claves WPA deben tener entre 8 y 63 carácteres y en ningún punto del soft se discrimina si será una cla WPA o WPA2, podrias quitar la caja de texto y poner simplemente un control UPDOWN desde 8 hasta 63 o un control COMBO desde 8 a 63 así quitar el control de excepcion de si mete un char alfabético, etc….
    No hace falta que declares int longitudCad = cadena.length(); ya que ya lo tienes en cadena.lenght() y es absurdo.
    Es mas estético usar clave += caracter qué clave = clave + caracter o al menos para mi.
    Bueno ya está. Aunque yo generaría claves de tamaño 63 y que cada uno corte o seleccione los chars que quiere.

    Un saludo.

    Responder
    0
    1. Sergio De Luz 14 Feb, 12 12:29

      Hola,

      Gracias por tu comentario.

      El soft no discrimina entre sí es una clave WPA o WPA2 porque es PSK (Pre-Shared Key) y en ambas son exactamente lo mismo, es decir, cogen la misma cadena de caracteres, sería exactamente igual 🙂

      Lo del control UPDOWN o el Combo ni siquiera lo pensé, creo que es más rápido meter un número y no ir subiendo y bajando…y más para tantos números… si hay muchos votos a favor lo cambio que es un momentillo.

      Respecto a lo del código, sí, tienes toda la razón que queda mucho mejor, pero es que así complementamos al curso de java que estamos dando 🙂 De esta forma es más didáctico digamos 😉

      Gracias por tus comentarios!! A ver qué más ideas se nos ocurren para aumentar funcionalidades 🙂

      Te gustaría la idea de generar por ejemplo 3 claves aleatorias y escribirlas en el fichero de texto para así ir cambiando de clave cada X tiempo??

      Saludos 😉

      Responder
      0
      1. Blom_xurry 14 Feb, 12 12:50

        Hombre toda funcionalidad es bien recibida. En cuanto al diseño, vigila y usa los estandares de diseño de software. Intenta que las cajas de entra de texto o inputs sean todos del mismo tamaño y estén bien distribuidos y equilibrados. Cambiaría un poco el aspecto la verdad. Los logos, iconos, botnes, no los dejes caer así sin más en el form y busca una estructura que de equilibrio y reticulado. En cuanto generar varias claves pues no estaría mal. Ya te digo, yo generaria claves de longitud 63 y arreando que cada uno corte y pegue por donde quiera.

        Un saludo.

        Responder
        0
        1. Sergio De Luz 14 Feb, 12 12:53

          OK, daremos unos toques a la interfaz y pondremos de generar varias claves en el fichero de texto 🙂

          Gracias por las ideas!!

          Responder
          0
  4. Goitia93 14 Feb, 12 13:23

    Perdonad, pero nose si sera un fallo pero cuando intento introducir una de las contraseñas generadas en mi router me dice que no coincide con la tabla ASCII y creo que es porque este caracter “¡” no esta incluido en esa tabla, pero el programa sí que lo genera para las contraseñas.

    Un salu2.

    Responder
    0
    1. Sergio De Luz 14 Feb, 12 15:34

      Eso lo pensé, pero por ejemplo el firmware Tomato RAF sí lo permite (comprobado ahora mismo 🙂 ), no da error…

      Responder
      0
  5. yomismo 14 Feb, 12 13:26

    Me parece mu interesante, asi no hay que estar comiendose la cabeza pensando en una clave segura

    Muchas gracias

    Responder
    0
  6. Dan 14 Feb, 12 13:52

    Lo suyo es una interfaz de comunicación con el router que cambie periódicamente la contraseña.
    Yo uso: python para el programa de comunicación con mi router, antes usaba a lo burro: firefox y Greasemonkey

    Os explico como funciona el mio:
    Cada semana genera una clave diferente.
    El programa accede al route y actualiza la contraseña
    En una base de datos, se almacena las claves, y se marcan si es la actual.

    La clave la tengo que actualizar manualmente en el sistema operativo (ando programando soporte para los diferente sistemas)

    La parte más complicada es dar soporte a todos los router del mercado, para ello se dejara en formato de API para que sea sencillo de programas para vuestro router.

    El programa funcionara como cliente / servidor para dar soporte en red.
    El servidor antes de cambiar la clave, consulta en la base de datos los clientes asociados (Dir.MAC) y comprueba si todos los clientes están operativos (en caso de no estar todos se deja una marca de los equipos que deberán de actualizar manualmente)
    tras enviar la clave a los clientes se procede actualizar la clave del router

    Cuando finalice el código os los dejo, con las instrucciones a compilar.

    un saludo.

    Responder
    0
    1. Sergio De Luz 14 Feb, 12 15:35

      JODER, eso es un señor programa, lo había pensado pero es lo que dices, que cada router lo gestiona de una forma diferente.

      Pues si nos lo pasas… muchas gracias!!

      PD: muchos usuarios tienen Tomato o DD-WRT, sería interesante dar soporte a estos firmwares 🙂

      Responder
      0
    2. MauroMasciar 14 Feb, 12 16:24

      Muy bueno… Post?

      Responder
      0
  7. Jose 14 Feb, 12 18:25

    porque abro el .jar y me lo abre el win.rar, que puedo hacer para ejecutarlo?

    Responder
    0
    1. Sergio De Luz 14 Feb, 12 19:16

      Eso es porque la extensión .jar la tienes asociada con el winrar, metelo en C:\ y abre el símbolo del sistema (CMD.exe), te sitúas en C mediante cd.. y a continuación pones java -jar archivo.jar y listo.

      Responder
      0
  8. Jose 14 Feb, 12 20:03

    Le he quitado al winrar la extension .jar y ahora cuando lo abro normal o por cmd me sale el tipico mensaje de windows de “abrir con” seleccionar de la lista.

    ¿Ahora que puedo hacer?

    gracias

    Responder
    0
    1. Sergio De Luz 14 Feb, 12 20:05

      Copialo a c:\ y en el cmd pones:

      java -jar “C:\archivo.jar”

      Y listo 🙂

      Responder
      0
  9. Anónimo 13 May, 12 19:03

    lo malo es q te olvides

    Responder
    0
  10. Fernando 29 Oct, 12 17:46

    Señores hasta aqui nomas va el curso java? no esta incompleto?

    Responder
    0