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_??_???