Guía de desarrollo

Local Navigation

Compendios

Los compendios son funciones hash que se utilizan para convertir datos de entrada en un hash de tamaño fijo. Los compendios pueden utilizarse como una función hash segura, con el fin de reducir una gran cantidad de datos a un único identificador de tamaño reducido. La funcionalidad que permite trabajar con compendios se proporciona en la interfaz net.rim.device.api.crypto.Digest.

La RIM Cryptographic API admite los siguientes algoritmos de hash:

  • Compendio MD2
  • Compendio MD4
  • Compendio MD5
  • Compendio SHA-1
  • Compendios SHA-224, SHA-256, SHA-384 y SHA-512
  • Compendios RIPEMD-128 y RIPEMD-160

En Norteamérica, las funciones hash más comunes son SHA-1 y SHA-2. La longitud de compendio de SHA-1 es de 160 bits. La función SHA-2 presenta longitudes de bits variables de 256, 384 y 512 bits. Estas longitudes coinciden con el nivel de seguridad del candidato de AES. La API de cifrado de RIM admite SHA-1 (en la clase SHA1Digest) y SHA-2 (en las clases SHA224Digest, SHA256Digest, SHA384Digest y SHA512Digest).

Ejemplo de código: utilizar compendios

El siguiente ejemplo de código ilustra el uso de SHA-1 y SHA-2. No obstante, todos los algoritmos se utilizan de la misma manera. Este ejemplo muestra cómo crear una instancia de los diferentes tipos de SHA. Utiliza el algoritmo SHA-1 para mostrar el funcionamiento de las funciones. Actualiza los contenidos de la función hash. Por último, obtiene el valor de hash.

// Instantiate any of the different types of SHA.
SHA1Digest digest160 = new SHA1Digest();
SHA256Digest digest256 = new SHA256Digest();
SHA384Digest digest384 = new SHA384Digest();
SHA512Digest digest512 = new SHA512Digest();
// Use the SHA-1 algorithm.
byte[] data = new byte[128];
RandomSource.getBytes( data );
// Update the contents of the hash function. (This is the data that gets hashed.)
digest160.update( data );
digest160.update( data, 10, 15 );
// Get the hash value.
byte[] digestValue = digest160.getDigest();

Puede recuperar el valor de hash haciendo uso del siguiente código.

byte[] hashValue = new byte[digest160.getDigestLength()];
digest160.getDigest( hashValue, 0 );

El siguiente ejemplo de código muestra cómo crear una instancia de DigestOutputStream y, a continuación, pasar una instancia de un algoritmo de compendio al constructor. Puede utilizar el mismo método para DigestInputStream. La única diferencia es que los datos leídos del flujo de entrada (pasados a DigestInputStream) se pasan a través del algoritmo de compendio.

Este ejemplo crea un compendio SHA de longitud predeterminada. A continuación, crea un objeto DigestOutputStream nuevo. El ejemplo pasa un valor nulo para el parámetro OutputStream, de forma que este flujo no pase los datos escritos en él a otro flujo de salida. A continuación, el ejemplo invoca el método write() y, por último, obtiene el valor de hash.

// Create a SHA digest with the default length (160-bit).
SHA1Digest digest = new SHA1Digest();
// Create a new DigestOutputStream. 
DigestOutputStream out = new DigestOutputStream( digest, null );
// Invoke write to update the digest (assuming data exists and contains the message).
out.write( data );
// Get the hash value.
byte[] digestValue = digest.getDigest();
Tema siguiente: MAC
Tema anterior: Flujos de firma

¿Le ha resultado útil esta información? Envíenos sus comentarios.