Generador de claves WPA y WPA2 en Java

Generador de claves WPA y WPA2 en Java

Sergio De Luz

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:

[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);
}

}

[/java]

Interfaz Interfaz.java:

[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);
}
}

[/java]

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!!