grado.sti.auxiliar
Class Datos

java.lang.Object
  extended by grado.sti.auxiliar.Datos

public class Datos
extends java.lang.Object

Clase que contiene utilidades para la operación con datos a nivel binario y de byte.

Author:
Jorge López Hernández-Ardieta

Field Summary
static int PADDING_0x0n
          PADDING_0x0n: Se añaden tantos 0's como sea necesario
static int PADDING_0x10n
          PADDING_0x10n: Se añaden tantos 0's como sea necesario, excepto el bit más significativo (MSB) que se pone a '1'
static int PADDING_0x1n
          PADDING_0x1n: Se añaden tantos 1's como sea necesario
 
Constructor Summary
Datos()
           
 
Method Summary
 byte[] anyadirLongitud(byte[] datos)
          Método que añade la longitud de los datos al final de los mismos (MSB).
 byte[] anyadirPadding(byte[] datos, int tamanyoBloque, int tipoPadding)
          Método que añade el tipo de padding indicado a los datos al final de los mismos (MSB), siempre y cuando la longitud de éstos no sea múltiplo del tamaño de bloque pasado como argumento, en cuyo caso se mantiene igual.
 java.lang.String bytesToHex(byte[] in)
          Método que formatea un array de bytes en hexadecimal.
 byte[] ejecutarXOR(byte[] a, byte[] b)
          Método que aplica un XOR (OR exclusivo) entre 2 arrays, a nivel de byte.
 byte[] obtenerBloque(byte[] datos, int inicio, int fin)
          Método que permite obtener un segmento del bloque de datos indicado.
 byte[] rotarIzquierdaBit(byte[] a)
          Método que rota un bit (desplazamiento circular) en un array de bytes.
 java.lang.String stringToHex(java.lang.String base)
          Método que formatea un string en hexadecimal.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PADDING_0x0n

public static final int PADDING_0x0n
PADDING_0x0n: Se añaden tantos 0's como sea necesario

See Also:
Constant Field Values

PADDING_0x1n

public static final int PADDING_0x1n
PADDING_0x1n: Se añaden tantos 1's como sea necesario

See Also:
Constant Field Values

PADDING_0x10n

public static final int PADDING_0x10n
PADDING_0x10n: Se añaden tantos 0's como sea necesario, excepto el bit más significativo (MSB) que se pone a '1'

See Also:
Constant Field Values
Constructor Detail

Datos

public Datos()
Method Detail

anyadirPadding

public byte[] anyadirPadding(byte[] datos,
                             int tamanyoBloque,
                             int tipoPadding)
                      throws java.lang.Exception
Método que añade el tipo de padding indicado a los datos al final de los mismos (MSB), siempre y cuando la longitud de éstos no sea múltiplo del tamaño de bloque pasado como argumento, en cuyo caso se mantiene igual.

Este método no modifica el array original, sino que devuelve uno nuevo.

Parameters:
datos - Datos a los que añadir el padding
tamanyoBloque - Tamaño de bloque de referencia para el padding
tipoPadding - Tipo de padding a añadir. Debe estar soportado (PADDING_0x0n, PADDING_0x1n, PADDING_0x10n). En caso contrario se tomará PADDING_0x0n como tipo de padding
Returns:
Los datos con el padding añadido en los bits más significativos
Throws:
java.lang.Exception - En caso de error

anyadirLongitud

public byte[] anyadirLongitud(byte[] datos)
                       throws java.lang.Exception
Método que añade la longitud de los datos al final de los mismos (MSB).

Este método no modifica el array original, sino que devuelve uno nuevo.

Parameters:
datos - Datos a los cuales se debe incorporar su longitud
Returns:
Datos con la longitud añadida en los MSB
Throws:
java.lang.Exception

rotarIzquierdaBit

public byte[] rotarIzquierdaBit(byte[] a)
                         throws java.lang.Exception
Método que rota un bit (desplazamiento circular) en un array de bytes.

Parameters:
a - Array de bytes
Returns:
El array de bytes de entrada con 1 bit rotado
Throws:
java.lang.Exception

ejecutarXOR

public byte[] ejecutarXOR(byte[] a,
                          byte[] b)
                   throws java.lang.Exception
Método que aplica un XOR (OR exclusivo) entre 2 arrays, a nivel de byte. Los tamaños de los arrays deben ser iguales.

Este método no modifica el array original, sino que devuelve uno nuevo.

Parameters:
a - Primer arrray
b - Segundo array
Returns:
Array resultante de aplicar un XOR entre a y b
Throws:
java.lang.Exception - En caso de error

obtenerBloque

public byte[] obtenerBloque(byte[] datos,
                            int inicio,
                            int fin)
                     throws java.lang.Exception
Método que permite obtener un segmento del bloque de datos indicado.

Este método no modifica el array original, sino que devuelve uno nuevo.

Parameters:
datos - Array de bytes del que se quiere obtener un bloque concreto.
inicio - Índice de inicio del segmento a obtener (debe ser menor que la longitud de los datos)
fin - Índice del byte final del segmento a obtener (debe ser, como mucho, la longitud de los datos)
Returns:
array de bytes del bloque
Throws:
java.lang.Exception - En caso que los índices indicados no sean correctos respecto a los datos

stringToHex

public java.lang.String stringToHex(java.lang.String base)
Método que formatea un string en hexadecimal.

Parameters:
base - String de entrada
Returns:

bytesToHex

public java.lang.String bytesToHex(byte[] in)
Método que formatea un array de bytes en hexadecimal.

Parameters:
in -
Returns: