La clase Cipher permite realizar encriptación y desencriptación, tanto con clave pública como privada. Para ello:
- Mediante el método
getInstance()se indica el algoritmo y proveedor que utilizará el objeto cifradorCipher. - Mediante el método
init()se indicará el modo de operación del objetoCipher, por ejemplo encriptar o desencriptar. - Mediante los métodos
update()ydoFinall()se insertarán datos en el objeto cifrador.
Podemos utilizar diferentes modos de operación, entre ellos:
ENCRYPT_MODE. Es el modo encriptación.DECRYPT_MODE. Es el modo desencriptación.WRAP_MODE. Convierte la clave en una secuencia de bytes para transmitirla de forma segura.UNWRAP_MODE. Permite obtener las claves generadas conWRAP_MODE.
La encriptación mediante un objeto Cipher puede ser:
- De bloque o
Block Cipher. El texto a cifrar se divide en bloques de una tamaño fijo de bits, normalmente 64 bits. Cada uno de estos bloques se cifra de manera independiente, y posteriormente se construye todo el texto cifrado. Si el texto a cifrar no es múltiplo de 64 se completa con un relleno o padding.Por ejemplo:
Cipher.getInstance("Rijndael/ECB/PKCS5Padding")indica que:- Se utiliza el algoritmo
Rijndael. - El modo es ECB (Electronic Code Book).
- El relleno es PKCS5 Padding.
- Se utiliza el algoritmo
- De flujo o
Stream Cipher. El texto se cifra bit a bit, byte a byte o carácter a carácter, en lugar de bloques completos de bits. Resulta muy útil cuando hay que transmitir información cifrada según se va creando, eso es, se cifra sobre la marcha.
