Criptografía Java: descifrado de datos
Puede descifrar los datos cifrados utilizando la clase Cipher del javax.cryptopaquete. Siga los pasos que se detallan a continuación para descifrar datos dados usando 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 del objeto KeyPair generado utilizando el getPublic() 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() El método de la clase Cipher acepta dos parámetros.
- Un parámetro entero que representa el modo de operación (cifrar / descifrar)
- 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();
Paso 9: inicialice el objeto Cipher para el descifrado
Para descifrar el cifrado cifrado en los pasos anteriores, debe inicializarlo para el descifrado.
Por lo tanto, inicialice el objeto de cifrado pasando los parámetros Cipher.DECRYPT_MODE y el objeto PrivateKey como se muestra a continuación.
//Initializing the same cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());
Paso 10: descifra los datos
Finalmente, descifre el texto cifrado usando el doFinal() método como se muestra a continuación.
//Decrypting the text
byte[] decipheredText = cipher.doFinal(cipherText);
Ejemplo
El siguiente programa Java acepta el texto del usuario, lo cifra utilizando el algoritmo RSA e imprime el cifrado del texto dado, descifra el cifrado e imprime el texto descifrado de nuevo.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
import javax.crypto.Cipher;
public class CipherDecrypt {
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);
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
//Add 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"));
//Initializing the same cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());
//Decrypting the text
byte[] decipheredText = cipher.doFinal(cipherText);
System.out.println(new String(decipheredText));
}
}
Salida
El programa anterior genera la siguiente salida:
Encrypted Text:
]/[?F3?D?p
v?w?!?H???^?A??????P?u??FA?
?
???_?? ???_jMH-??>??OP?'?j?_?n`
?_??'`????o??_GL??g???g_f?????f|???LT?|?Vz_TDu#??\?<b,,?$C2???Bq?#?lDB`??g,^??K?_?v???`}
?;LX?a?_5e???#???_?6?/B&B_???^?__Ap^#_?q?IEh????_?,??*??]~_?_?D?
_y???lp??a?P_U{
Decrypted Text:
Welcome to Tutorialspoint