Criptografía Java: cifrado de datos

Puede cifrar datos dados utilizando la clase Cipher del javax.cryptopaquete. Siga los pasos que se detallan a continuación para cifrar datos determinados con Java.

Paso 1: crear un objeto KeyPairGenerator

los KeyPairGenerator la clase proporciona getInstance() método que acepta una variable String que representa el algoritmo de generación de claves requerido y devuelve un objeto KeyPairGenerator que genera claves.

Crear KeyPairGenerator objeto usando el getInstance() método como se muestra a continuación.

//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");

Paso 2: inicializar el objeto KeyPairGenerator

los KeyPairGenerator la clase proporciona un método llamado initialize()este método se utiliza para inicializar el generador de pares de claves. Este método acepta un valor entero que representa el tamaño de la clave.

Inicialice el objeto KeyPairGenerator creado en el paso anterior usando el initialize() método como se muestra a continuación.

//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);

Paso 3: Genere el KeyPairGenerator

Puede generar el KeyPair utilizando el generateKeyPair() método del KeyPairGeneratorclase. Genere el par de claves utilizando este método como se muestra a continuación.

//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();

Paso 4: Obtén la clave pública

Puede obtener la clave pública de la generada KeyPair objeto usando el getPublic() método como se muestra a continuación.

Obtenga la clave pública usando este método como se muestra a continuación.

//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();

Paso 5: Crea un objeto Cipher

los getInstance() método de Cipher La clase acepta una variable String que representa la transformación requerida y devuelve un objeto Cipher que implementa la transformación dada.

Cree el objeto Cipher utilizando el getInstance() método como se muestra a continuación.

//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

Paso 6: inicializar el objeto Cipher

los init() método del Cipher La clase acepta dos parámetros: un parámetro entero que representa el modo de operación (cifrar / descifrar) y un objeto Clave que representa la clave pública.

Inicialice el objeto Cypher usando el init() método como se muestra a continuación.

//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);

Paso 7: agregar datos al objeto Cipher

los update() El método de la clase Cipher acepta una matriz de bytes que representa los datos a cifrar y actualiza el objeto actual con los datos proporcionados.

Actualice el objeto Cipher inicializado pasando los datos al update() método en forma de matriz de bytes como se muestra a continuación.

//Adding data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();	  
cipher.update(input);

Paso 8: cifre los datos

los doFinal()El método de la clase Cipher completa la operación de cifrado. Por lo tanto, finalice el cifrado utilizando este método como se muestra a continuación.

//Encrypting the data
byte[] cipherText = cipher.doFinal();

Ejemplo

El siguiente programa Java acepta texto del usuario, lo encripta usando el algoritmo RSA e imprime el formato encriptado del texto dado.

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;

public class CipherSample {
   public static void main(String args[]) throws Exception{
      //Creating a Signature object
      Signature sign = Signature.getInstance("SHA256withRSA");
      
      //Creating KeyPair generator object
      KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
      
      //Initializing the key pair generator
      keyPairGen.initialize(2048);
      
      //Generating the pair of keys
      KeyPair pair = keyPairGen.generateKeyPair();      
	
      //Creating a Cipher object
      Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        
      //Initializing a Cipher object
      cipher.init(Cipher.ENCRYPT_MODE, pair.getPublic());
	  
      //Adding data to the cipher
      byte[] input = "Welcome to Tutorialspoint".getBytes();	  
      cipher.update(input);
	  
      //encrypting the data
      byte[] cipherText = cipher.doFinal();	 
      System.out.println(new String(cipherText, "UTF8"));
   }
}

Salida

El programa anterior genera la siguiente salida:

Encrypted Text: 
"???:]J_?]???;Xl??????*@??u???r??=T&???_?_??.??i?????(?$_f?zD??????ZGH??g???
g?E:_??bz^??f?~o???t?}??u=uzp\UI????Z??l[?G?3??Y?UAEfKT?f?O??N_?d__?????a_?15%?^?
'p?_?$,9"{??^??y??_?t???,?W?PCW??~??[?$??????e????f?Y-Zi__??_??w?_?&QT??`?`~?[?K_??_???