Lógica Alternativa

'¿Otro blog de informática? … Todavía no' .- Cuaderno de bitácora de Miguel R. Esteban

Ir al contenido
  • Inicio
  • Mi CV
  • Mapa del sitio
Lógica Alternativa

(Java) Securización de formulario de acceso con SHA-1

Anonymous_JAVA_pCompletando la entrada anterior, he realizado la implementación en Java. Básicamente ‘todo es lo mismo… pero no es igual‘  :-). Cambia la manera de obtener el número aleatorio y la forma de obtener el sha-1.

La estructura es la de un proyecto Maven web con su pom.xml para que sea sencillo compilarlo y generar el war. Paso a explicarlo. 

El código puedes verlo en este enlace:

https://github.com/logicaalternativa/ejemplosJava/tree/master/loginsha1

Para no complicarlo y no desviar la atención, no he utilizado controladores o servlets, la lógica está en dos jsp. Los archivos index.jsp y resultado.jsp son similares a index.php y resultado.php, simplemente me he limitado a transcribir el código a Java.

La clase UtilCripto

El “meollo” de todo está en la clase UtilCripto. Incluye todos los métodos para obtener la cadena aleatoria y el sha-1

Método obtenerNumeroAleatorio

Se utiliza en index.jsp. En este método se utiliza la clase SecureRandom del paquete java.security que permite obtener números ‘más’ aleatorios que la clase de la que es hija Random.

1
public static int obtenerNumeroAleatorio(int desde, int hasta) throws Exception {
2
 ...
3
   SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
4
   int valor = random.nextInt( ( hasta + 1 ) - desde);
5
   return  desde + valor;
6
}

Codigo 01

El método nextInt devuelve un entero aleatorio entre el 0 (inclusive) y el que se pasa por argumento (exclusive). Para que la función pueda devolver también el valor ‘hasta‘ se le suma 1 (línea 4).

Método obtenerSHA1

Se utiliza en resultado.jsp. Obtiene el hash SHA-1 de la cadena a través de la clase MessageDigest del paquete java.security. Es necesario obtener su representación hexadecimal porque la función sha-1 de PHP.js devuelve el valor en este formato.

01
public static String obtenerSHA1( String cadena ) {
02
   ...
03
   try {
04
      MessageDigest miMessageDigest = MessageDigest.getInstance("SHA-1");
05
      miMessageDigest.reset();
06
      byte[] bytes = cadena.getBytes();
07
      miMessageDigest.update( bytes );
08
      return pasarHexadecimal( miMessageDigest.digest() );
09
   } catch (Exception e ) {
10
      ...
11
   }
12
}

Código 02

Ese paso en java no es tan trivial por lo que he tenido que codificar el método pasarHexadecimal

1
private static String pasarHexadecimal( byte[] bytes ) {
2
   StringBuffer sb = new StringBuffer();
3
   for (int i = 0; i < bytes.length; i++) {        
4
      sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));          
5
   }
6
   return sb.toString();
7
}

Codigo 03

Espero que os sirva.

Entrada relacionada: Securización de formulario de acceso con SHA-1

M.E.

Esta entrada se publicó en Java, JavaScript y está etiquetada con acceso, Java, JavaScript, login, securizar, SHA-1 en 28 abril, 2013 por Miguel R. Esteban Martín.

Navegación de entradas

← Securización de formulario de acceso con SHA-1 Cambio de color a barra de progreso en Android →
[RSS]  RSS de las entradas

Entradas recientes

  • Speaker en la Commit Conf 2024
  • Charla en MadridJUG/Madrid GUG sobre tipos algebraicos en Java 21
  • Charla Commit Conf 2023 sobre programación funcional y patrones funcionales
  • Notas sobre aprendizaje por refuerzo
  • Vídeo y diapositivas de la charla de Commit Conf

Sobre el autor

[Sobre el autor] Mi nombre es Miguel Rafael Esteban Martín. Llevo más de 20 años trabajando como desarrollador  y  arquitecto  de software en diferentes empresas, lenguajes de programación y plataformas.
En este blog hablaré sobre programación y tecnología e intentaré hacerlo de manera clara y amena.
Actualmente trabajando como Principal Software Developer en Oracle.
Más sobre mi en el enlace Mi CV

Contacto
[correo electrónico][Perfil en LinkedIn][Perfil en Twitter][Perfil en GitHub]

Categorías

  • Android
  • APIs
  • Control de la configuración
  • Criptografía y certificados
  • Funcional
  • General
  • Inteligencia artificial
  • Java
  • JavaScript
  • La Nube
  • Patrones
  • PHP
  • Presentaciones
  • Programación
  • Reactiva
  • Scala
  • Sistemas operativos
Licencia de Creative Commons
Lógica Alternativa by Miguel Rafael Esteban Martín is licensed under a Creative Commons Reconocimiento-NoComercial 3.0 Unported License.