Fluid Attacks logo
Contact Us
Young hacker smiling
Zero false positives

Expert intelligence + effective automation

Contact logo Contact Us
GET A DEMO

Usar HMAC-SHA256

Necesidad

Generar el resumen criptográfico de una información mediante el uso del algoritmo HMAC-SHA256.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se dispone de un compilador estándar de Java.

Solución

HMAC o código de autenticación de mensajes en clave hash, fue diseñado con el fin de calcular un código MAC (Message authentication code. Es decir, una porción de información utilizada para calcular un mensaje), haciendo uso de una función hash criptográfica y una llave secreta. Por lo tanto, se intuye que la fuerza criptográfica del HMAC depende directamente de la potencia criptográfica de la función de hash subyacente, el tamaño de su salida de hash y el tamaño y calidad de la llave.

Por otro lado, una función hash criptográfica es un algoritmo matemático que transforma un bloque de información en una serie de caracteres con longitud fija, dicha información puede ser un fichero de texto, una imagen o, incluso, un archivo ejecutable. Sin importar el tamaño del bloque de información, y dependiendo de la función hash elegida, el valor cifrado tendrá siempre la misma longitud.

Un ejemplo de este tipo de función criptográfica es SHA256 cuyo tamaño de salida del valor cifrado equivale a 256 bits. Entonces, al hacer uso del código de autenticación HMAC en compañía de la función SHA256 (HMAC-SHA256), se obtiene un algoritmo de cifrado bastante potente a la hora de generar resúmenes criptográficos.

  1. En Java, con el fin de generar un resumen criptográfico usando HMAC-SHA256 es necesario importar las siguientes clases

    cli.java
    1
    2
    3
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.Mac;
    
  2. Una vez importadas las clases, y con el fin de generar la clave secreta, se debe invocar el método estático getInstance de la clase KeyGenerator

    1
    2
    3
    4
    5
    class CLI {
      public static void main(String[] args) throws Exception {
        String algorithm = "HmacSHA256";
        KeyGenerator kg = KeyGenerator.getInstance(algorithm);
        SecretKey key = kg.generateKey();
    
  3. Para utilizar una instancia del algoritmo HMAC-SHA256 es necesario utilizar el método estático getInstance de la clase Mac, pasándole como parámetro el nombre del algoritmo a ser empleado.

    1
    2
    Mac mac = Mac.getInstance(algorithm);
    mac.init(key);
    
  4. Con el fin de obtener el hash del contenido de la variable message, se debe invocar el método doFinal de la clase Mac.

    1
    2
    String message = "This is the message";
    byte[] tag = mac.doFinal(message.getBytes());
    
  5. Finalmente se imprimen los resultados de cuando se cifra y descifra el texto.

    1
    2
    3
    4
    5
      System.out.println("Text: " + message);
      String encodedTag = javax.xml.bind.DatatypeConverter.printBase64Binary(tag);
      System.out.println(algorithm + ": " + encodedTag);
     }
    }
    
  6. Compilamos y ejecutamos

    compile.bash
    1
    2
    3
    4
    $ javac CLI.java
    $ java CLI
    mensaje: This is the message
    HmacSHA256: NmMyZDQ4YWI4YTJkZj/BkYzkxMjU4YzRkOWQwMzMyYzkzM+jAzM2FhM2FjYmU3YjI5ZWZkNzMyYjNmYWUxMjFjNg==
    

Descargas

Puedes descargar el código fuente pulsando en el siguiente enlace:

CLI.java Clase CLI.


Service status - Terms of Use