Bouncy Castle

RECU-0235 (Recurso Ficha Técnica)

Descripción

Es una librería de cifrado de la información utilizando criptografía. Es de libre distribución y tiene distribuciones para todos los jre de java existentes, incluso para clientes j2me. Java, nos proporciona un soporte de cifrado pero no es completo, de ahí la necesidad de usar librerías adicionales que lo cumplimenten. Esta librería ofrece una completa y efectiva solución a esta problemática. Nos proporciona:

  • Un API de criptografía en Java
  • Un proveedor de JCE y JCA. También nos proporciona una implementación de JCE 1.2.1.
  • Una librería que permite escribir y leer objetos ASN.1 codificados.
  • Generadores de versiones 1 y 3 para certificados X.509, versión 2 de CRLs, y archivos PKCS12.
  • Generadores de la versión 2 para los certificados X.509.+
  • Generadores / Procesadores para S/MIME y CMS (PKCS7/RFC 3852).
  • Generadores / Procesadores para OCSP (RFC 2560).
  • Generadores / Procesadores para TSP (RFC 3161).
  • Generadores / Procesadores para OpenPGP (RFC 2440).

Ejemplo de uso

import java.security.*;

import javax.crypto.*;
import javax.crypto.interfaces.*;
import javax.crypto.spec.*;

import java.io.*;


public class EjemploHash {
    /*  Ejemplo de uso de funciones de resumen Hash
     *  carga el fichero que recibe como parametro y genera el resumen
     */
    public static void main(String[] args) throws Exception {
        // Comprobar argumentos
        if (args.length != 1) {
            mensajeAyuda();
            System.exit(1);
        }

        /* Cargar "provider" (sólo si no se usa el que viene por defecto) */
        Security.addProvider(new BouncyCastleProvider());  // Usa provider BC
       
        /* Crear función resumen */
        MessageDigest messageDigest = MessageDigest.getInstance("MD5"); // Usa MD5
        // MessageDigest messageDigest = MessageDigest.getInstance("SHA"); // Usar SHA-1

        /* Leer fichero de 1k en 1k y pasar fragmentos leidos a la funcion resumen */
        byte[] buffer = new byte[1000];
        FileInputStream in = new FileInputStream(args[0]);
        int leidos = in.read(buffer, 0, 1000);
        while (leidos != -1) {
            messageDigest.update(buffer); // Pasa texto claro a la función resumen
            leidos = in.read(buffer, 0, 1000);
        }
        in.close();
           
        byte[] resumen = messageDigest.digest(); // Completar el resumen

        // Mostrar resumen
        System.out.println("RESUMEN:");
        mostrarBytes(resumen);
        System.out.println();
    }

    public static void mostrarBytes(byte [] buffer) {
        System.out.write(buffer, 0, buffer.length);
    }
   
    public static void mensajeAyuda() {
        System.out.println("Ejemplo funciones Hash");
        System.out.println("\tSintaxis:   java EjemploHash fichero");
        System.out.println();
    }

}

Usos y Recomendaciones Conocidas

  • Sistema de licitación electrónica del Gobierno Vasco
  • Framework AME de Endesa
  • Siemens la recomienda para sus desarrollos internos

Requisitos e incompatibilidades

  • importar java.security.*;
  • importar java.security.interfaces.*;
  • importar java.security.spec.*;
  • importar javax.crypto.*;
  • importar javax.crypto.interfaces.*;
  • importar javax.crypto.spec.*;
  • import org.bouncycastle.jce.provider.BouncyCastleProvider;

Contenidos relacionados

Pautas
Área: Desarrollo » Librerías y Módulos » Java
Código Título Tipo Carácter
LIBP-0344 Librerías para aplicaciones Java Libro de pautas Directriz Recomendada