Cifrado PGP en Java

Cifrado PGP en Java
PGP o Muy buena privacidad Emplea una combinación de técnicas de cifrado, hash y compresión de datos para cifrar y descifrar mensajes, correos electrónicos y documentos. Utiliza un sistema clave único, en el que un "Llave pública"Y un"Llave privadaSe asignan a un usuario. Por ejemplo, cuando un usuario intenta enviar un mensaje utilizando su clave pública, PGP encripta ese mensaje específico que ayuda a asegurarlo durante la transmisión. Luego, después de recibir el mensaje cifrado, el destinatario o el receptor usa su clave privada para descifrar el mensaje.

Cifrado PGP con algoritmo RSA

El Keypair PGP se puede generar utilizando una variedad de algoritmos de cifrado; Sin embargo, cuando generas manualmente las teclas PGP, proporciona RSA Como la opción de algoritmo predeterminada. El algoritmo RSA fue creado por "Rivest-Shamir-Adleman" en 1978. Utiliza claves públicas y privadas para cifrado de datos y descifrado. Por ejemplo, un cliente envía al servidor su clave pública y solicita algunos datos. Luego, el servidor cifra los datos con la ayuda de la clave pública del cliente y se los envía. Después de recibir los datos, el cliente los descifra utilizando su clave privada.

RSA le permite asegurar su archivo o mensaje antes de enviarlos. El uso de RSA en el método de cifrado PGP le permite certificar sus datos, por lo que el receptor sabe si está alterado o modificado durante la transmisión. Este artículo te guiará sobre Cifrado PGP en Java utilizando el RSA algoritmo. Además, también demostraremos un programa Java para el cifrado y descifrado de PGP en Linux. Entonces, comencemos!

Nota: Antes de saltar al proceso de cifrado PGP en Java, instale Java JDK en su sistema Linux si aún no lo tiene.

Cómo instalar Java JDK 17 en Linux

Para instalar Java JDK 17 En su sistema, en primer lugar, presione "Ctrl+Alt+T"Para abrir el terminal y luego ejecutar el siguiente comando CURL:

$ curl -o https: // descargar.oráculo.com/java/17/último/jdk-17_linux-x64_bin.alquitrán.GZ

La salida sin error declara que la descarga se completa. Ahora, extraeremos el "jdk-17_linux-x64_bin.alquitrán.GZ"Con la ayuda de los siguientes"alquitrán" dominio:

$ TAR -XVF JDK-17_LINUX-X64_BIN.alquitrán.GZ

En el siguiente paso, moveremos el "JDK-17.0.1"Extraído directorio al"/optar/" ubicación:

$ sudo MV JDK-17.0.1 /opt /jdk17

Después de eso, configure la variable de entorno Java y agregue la ruta:

$ exporta java_home =/opt/jdk17

Hasta este punto, ha instalado y configurado Java JDK en su sistema. Para la versión de verificación, escriba el "Java"Comando con el"-versión" opción:

$ java --versión

Cifrado PGP en Java usando RSA

Ahora, avanzaremos y crearemos un programa Java para encriptar y descifrar un mensaje con la ayuda de las teclas PGP. El algoritmo que vamos a usar es "RSA", con "PKCS1"Pading y"BCE" Modo bloque. El "BCE"O el modo de libro de código electrónico es el enfoque más directo utilizado para procesar una secuencia de bloques de mensajes, mientras que el"Pksc1"El relleno ayuda a RSA a definir las propiedades matemáticas del par de claves PGP y el proceso de cifrado.

En primer lugar, crearemos un "RSA" clase:

clase pública RSA

Este "RSA"La clase tendrá dos variables, la"llave privada" y el "Llave pública":

Private Key PrivateKey;
Public Key PublicKey privado;

Asignaremos el valor a las claves PGP definidas usando un "Keypairgenerator". El "Keypairgenerator"Utilizará el"RSA"Algoritmo para generar los valores de KeyyPair PGP en el constructor de la clase RSA:

public rsa ()
intentar
KeyPairGenerator Generator = KeyPairGenerator.GetInstance ("RSA");
generador.inicializar (1024);
Par par de keypair = generador.GenerateKepair ();
PrivateKey = par.getPrivate ();
PublicKey = par.getPublic ();
catch (excepción ignorada)

En el siguiente paso, crearemos un "codificar()" y "descodificar()"Función que se utilizará para codificar y decodificar el mensaje con el"base64"(Binario a texto) codificador y decodificador:

Private String code (byte [] data)
Base de retorno64.getencoder ().EncodetoString (datos);

byte privado [] decode (string data)
Base de retorno64.getDecoder ().decodificación (datos);

Ahora, agregue un encrypt () función en la clase RSA. En el "encrypt ()"Función, primero convertiremos el mensaje agregado en bytes ya que el cifrado especificado se puede hacer utilizando una matriz de bytes. Después de hacerlo, especificaremos el algoritmo, el modo de bloque y el relleno como "RSA/ECB/PKCS1 Padding" para "cifrar" objeto. Luego, inicializaremos el cifrado con el "CiCrypt_Mode"Y el PGP"Llave pública".

Esta función cifrado () usará nuestro PGP "Llave pública"Para cifrar el mensaje y devolver los bytes encriptados:

public String CiCrypt (Mensaje de cadena) lanza la excepción
byte [] messageTobytes = mensaje.getBytes ();
Cifrado de cifrado = cifrado.getInStance ("RSA/ECB/PKCS1Padding");
cifrar.init (cifrado.Cifrypt_mode, public key);
byte [] cifrado en cifrado = cifrado.dofinal (Messagetobytes);
devolver encode (cifrado en cifrado);

Del mismo modo, definiremos otra función llamada "Decrypt ()"Para decodificar las cadenas que usarán nuestro PGP"llave privada"Para descifrar el mensaje encriptado en el "Decrypt_mode" y devuelve la matriz descifrada:

Public String Decrypt (String CiCrypTedMessage) lanza la excepción
byte [] encryptedBytes = decode (cifrado de message);
Cifrado de cifrado = cifrado.getInStance ("RSA/ECB/PKCS1Padding");
cifrar.init (cifrado.Decrypt_mode, privateKey);
byte [] descifradomessage = cifrado.dofinal (cifrado en cifrado);
devolver nueva cadena (DecryptedMessage, "UTF8");

Ahora, revisemos el "principal()" Funcionalidad del método. En "principal(),", En primer lugar, definiremos dos cuerdas"Cifrado" y "DecrypteedMessage". El "CifrypedMessage" Compensará la forma encriptada de nuestra cadena adicional "Esto es linuxhint.comunicarse"Que encriptaremos usando la función RSA CiCrypt () y la"DecrypteedMessage"Variable almacenará el mensaje descifrado:

public static void main (string [] args)
RSA RSA = new rsa ();
intentar
String CiencedMessage = RSA.encrypt ("Este es Linuxhint.com ");
Cadena DecryptedMessage = RSA.Decrypt (CiencedMessage);
Sistema.errar.println ("encriptado: \ n"+encryptedMessage);
Sistema.errar.println ("descifrado: \ n"+descifradomessage);
catch (excepción ignorada)

Implementación del cifrado PGP en Java

Esperamos que nuestras instrucciones dadas le ayuden a comprender el código anterior. Esta sección implementará el código Java de cifrado PGP proporcionado en nuestro sistema Linux para mostrarle su salida. Para este propósito, en primer lugar, crearemos un "RSA.Java"Archivo Java usando el"nano" editor:

$ sudo nano rsa.Java

Su "RSA.Java" El archivo inicialmente se verá así:

Ahora, agregue el siguiente código en su "RSA.Java"Archivo y presione"CTRL+O"Para guardar los cambios adicionales:

Importar Javax.cripto.Cifrar;
importar java.seguridad.Par de claves;
importar java.seguridad.KeyPairGenerator;
importar java.seguridad.Llave privada;
importar java.seguridad.Llave pública;
importar java.utilizar.Base64;
clase pública RSA
Private Key PrivateKey;
Public Key PublicKey privado;
public rsa ()
intentar
KeyPairGenerator Generator = KeyPairGenerator.GetInstance ("RSA");
generador.inicializar (1024);
Par par de keypair = generador.GenerateKepair ();
PrivateKey = par.getPrivate ();
PublicKey = par.getPublic ();
catch (excepción ignorada)


public String CiCrypt (Mensaje de cadena) lanza la excepción
byte [] messageTobytes = mensaje.getBytes ();
Cifrado de cifrado = cifrado.getInStance ("RSA/ECB/PKCS1Padding");
cifrar.init (cifrado.Cifrypt_mode, public key);
byte [] cifrado en cifrado = cifrado.dofinal (Messagetobytes);
devolver encode (cifrado en cifrado);

Private String code (byte [] data)
Base de retorno64.getencoder ().EncodetoString (datos);

Public String Decrypt (String CiCrypTedMessage) lanza la excepción
byte [] encryptedBytes = decode (cifrado de message);
Cifrado de cifrado = cifrado.getInStance ("RSA/ECB/PKCS1Padding");
cifrar.init (cifrado.Decrypt_mode, privateKey);
byte [] descifradomessage = cifrado.dofinal (cifrado en cifrado);
devolver nueva cadena (DecryptedMessage, "UTF8");

byte privado [] decode (string data)
Base de retorno64.getDecoder ().decodificación (datos);

public static void main (string [] args)
RSA RSA = new rsa ();
intentar
String CiencedMessage = RSA.encrypt ("Este es Linuxhint.com ");
Cadena DecryptedMessage = RSA.Decrypt (CiencedMessage);
Sistema.errar.println ("encriptado: \ n"+encryptedMessage);
Sistema.errar.println ("descifrado: \ n"+descifradomessage);
catch (excepción ignorada)

A continuación, compile el "RSA.Java"Archivo escribiendo el siguiente comando:

$ Javac RSA.Java

La compilación del archivo especificado dará como resultado un "RSA"Archivo binario, ejecútelo para obtener la salida de cifrado y descifrado PGP en su terminal de Linux:

$ java rsa

Desde la salida, puede consultar las cadenas cifradas y descifradas:

Conclusión

El cifrado PGP le permite enviar mensajes o correos electrónicos de forma segura utilizando su combinación de "Público" y "Privado" llaves. Para mostrar que un remitente es el propietario legítimo de la comunicación, proporciona una firma digital para claves privadas y públicas. El cifrado PGP también se usa para confirmar si un mensaje se entrega al receptor previsto o no. Este artículo te guió sobre Cifrado PGP en Java utilizando el RSA algoritmo. Además, también demostramos un programa Java para el cifrado y descifrado de PGP en nuestro sistema Linux.