Criptografia PGP em Java

Criptografia PGP em Java
Pgp ou Muito boa privacidade Emprega uma combinação de técnicas de criptografia, hash e compactação de dados para criptografar e descriptografar mensagens, e -mails e documentos. Ele usa um sistema chave exclusivo, no qual um “Chave pública"E um"Chave privada”São atribuídos a um usuário. Por exemplo, quando um usuário tenta enviar uma mensagem utilizando sua chave pública, o PGP criptografa essa mensagem específica que ajuda a protegê -la durante a transmissão. Então, depois de receber a mensagem criptografada, o destinatário ou o receptor usa sua chave privada para descriptografar a mensagem.

Criptografia PGP com algoritmo RSA

O teclado PGP pode ser gerado usando uma variedade de algoritmos de criptografia; No entanto, quando você gera manualmente as teclas PGP, ele fornece RSA Como a opção de algoritmo padrão. O algoritmo RSA foi criado por “Rivest-Shamir-Adleman" em 1978. Ele usa chaves públicas e privadas para criptografia e descriptografia de dados. Por exemplo, um cliente envia ao servidor sua chave pública e solicita alguns dados. Em seguida, o servidor criptografa os dados com a ajuda da chave pública do cliente e envia para eles. Depois de receber os dados, o cliente os descriptografa utilizando sua chave privada.

A RSA permite que você proteja seu arquivo ou mensagem antes de enviá -los. O uso do RSA no método de criptografia PGP permite certificar seus dados, para que o receptor saiba se é alterado ou modificado durante a transmissão. Este artigo irá guiá-lo sobre Criptografia PGP em Java usando o RSA algoritmo. Além disso, também demonstraremos um programa Java para criptografia e descriptografia PGP no Linux. Então vamos começar!

Observação: Antes de entrar no processo de criptografia PGP em Java, instale Java JDK no seu sistema Linux se você não o tiver já.

Como instalar o Java JDK 17 no Linux

Para instalar Java JDK 17 Em seu sistema, primeiro, pressione “Ctrl+alt+t”Para abrir o terminal e executar o seguinte comando curl:

$ curl -o https: // download.oráculo.com/java/17/mais recente/jdk-17_linux-x64_bin.alcatrão.gz

A saída sem erros declara que o download é concluído. Agora, vamos extrair o “JDK-17_LINUX-X64_BIN.alcatrão.gz”Com a ajuda do"alcatrão”Comando:

$ tar -xvf jdk-17_linux-x64_bin.alcatrão.gz

Na próxima etapa, vamos mover o “JDK-17.0.1”Diretório extraído para o“/optar/”Localização:

$ sudo mv jdk-17.0.1 /opt /jdk17

Depois disso, defina a variável de ambiente Java e adicione o caminho:

$ export java_home =/opt/jdk17

Até este ponto, você instalou e configurou Java JDK em seu sistema. Para a versão de verificação, digite o “Java”Comando com o“-versão”Opção:

$ java --version

Criptografia PGP em Java usando RSA

Agora, seguiremos em frente e criaremos um programa Java para criptografar e descriptografar uma mensagem com a ajuda das teclas PGP. O algoritmo que vamos usar é “RSA", com "PKCS1”Enchendo e“BCE”Modo de bloco. O "BCE”Ou o modo de livro de código eletrônico é a abordagem mais direta usada para processar uma sequência de blocos de mensagens, enquanto o“ “PKSC1”O preenchimento auxilia na RSA na definição das propriedades matemáticas do par de chaves do PGP e o processo de criptografia.

Primeiro de tudo, criaremos um “RSA" aula:

classe pública RSA

Esse "RSA”A classe terá duas variáveis, a“chave privada" e a "chave pública”:

Private PrivateKey PrivateKey;
PublicKey privado PublicKey;

Atribuiremos o valor às teclas PGP definidas usando um “TECHERGERGERERATOR”. O "TECHERGERGERERATOR”Será utilizar o“RSA”Algoritmo para gerar os valores do teclado PGP no construtor da classe RSA:

public rsa ()
tentar
Gerador de keyyairGenerator = keypairGenerator.getInstance ("rsa");
gerador.inicializar (1024);
Par de teclado = gerador.generateKeypair ();
privateKey = par.getPrivate ();
PublicKey = par.getpublic ();
catch (exceção ignorada)

Na próxima etapa, criaremos um “codificar()" e "decodificar()”Função que será usada para codificar e decodificar a mensagem com o“base64”(Binário para texto) Encoder e decodificador:

private string cody (byte [] dados)
Retornar base64.getEncoder ().codetoString (dados);

byte privado [] decodifica (dados da string)
Retornar base64.getDecoder ().decodificar (dados);

Agora, adicione um Encrypt () função na classe RSA. No "Encrypt ()”Função, primeiro converteremos a mensagem adicionada em bytes, pois a criptografia especificada pode ser feita usando uma matriz de bytes. Depois de fazer isso, especificaremos o algoritmo, o modo de bloco e o preenchimento como “RSA/BCE/PKCS1Padding" para "cifra”Objeto. Então, inicializaremos a cifra com o “Encrypt_mode”E o PGP“chave pública”.

Esta função Encrypt () usará nosso PGP “chave pública”Para criptografar a mensagem e retornar os bytes criptografados:

public String Encrypt (Mensagem String) lança Exceção
byte [] messageTobytes = mensagem.getBytes ();
Cifra cifra = cifra.getInstance ("RSA/ECB/PKCS1Padding");
cifra.init (cifra.Encrypt_mode, PublicKey);
byte [] EncryptedBytes = cifra.dofinal (messagetobytes);
Return Encody (EncryptedBytes);

Da mesma forma, definiremos outra função chamada “descriptografar ()”Para decodificar as cordas que usarão nosso PGP“chave privada”Para descriptografar a mensagem criptografada no “Decrypt_mode” e devolver a matriz descriptografada:

public string decrypt (string criprytedmessage) lança exceção
byte [] EncryptedBytes = decode (EncryptedMessage);
Cifra cifra = cifra.getInstance ("RSA/ECB/PKCS1Padding");
cifra.init (cifra.Decrypt_mode, privateKey);
byte [] descriptografmessage = cifra.dofinal (criptografado);
retornar nova string (descriptografada, "utf8");

Agora, vamos verificar o "principal()" funcionalidade do método. Em "principal(),", Em primeiro lugar, definiremos duas cordas"EncryptedMessage" e "DecryptedMessage”. O “EncryptedMessage” Irá compreender a forma criptografada da nossa string adicionada “Isso é Linuxhint.com”Que iremos criptografar usando a função RSA Encrypt () e a“ “DecryptedMessage”A variável armazenará a mensagem descriptografada:

public static void main (string [] args)
Rsa rsa = novo rsa ();
tentar
String EncryptedMessage = RSA.Encrypt ("Isso é Linuxhint.com ");
String descriptografada = RSA.descriptografar (criptografado);
Sistema.errar.println ("Criptografado: \ n"+criptografado);
Sistema.errar.println ("descriptografado: \ n"+descriptografado);
catch (exceção ignorada)

Implementação da criptografia PGP em Java

Esperamos que nossas instruções fornecidas ajudem você a entender o código acima do público. Esta seção implementará o código Java de criptografia PGP fornecido em nosso sistema Linux para mostrar sua saída. Para esse fim, em primeiro lugar, criaremos um “RSA.Java”Arquivo Java usando o“Nano" editor:

$ sudo nano rsa.Java

Seu "RSA.Java" O arquivo será inicialmente assim:

Agora, adicione o seguinte código em seu “RSA.Java”Arquivo e pressione“Ctrl+o”Para salvar as alterações adicionais:

importar javax.cripto.Cifra;
importar java.segurança.Teclado;
importar java.segurança.KEYYPAirGenerator;
importar java.segurança.Chave privada;
importar java.segurança.Chave pública;
importar java.util.Base64;
classe pública RSA
Private PrivateKey PrivateKey;
PublicKey privado PublicKey;
public rsa ()
tentar
Gerador de keyyairGenerator = keypairGenerator.getInstance ("rsa");
gerador.inicializar (1024);
Par de teclado = gerador.generateKeypair ();
privateKey = par.getPrivate ();
PublicKey = par.getpublic ();
catch (exceção ignorada)


public String Encrypt (Mensagem String) lança Exceção
byte [] messageTobytes = mensagem.getBytes ();
Cifra cifra = cifra.getInstance ("RSA/ECB/PKCS1Padding");
cifra.init (cifra.Encrypt_mode, PublicKey);
byte [] EncryptedBytes = cifra.dofinal (messagetobytes);
Return Encody (EncryptedBytes);

private string cody (byte [] dados)
Retornar base64.getEncoder ().codetoString (dados);

public string decrypt (string criprytedmessage) lança exceção
byte [] EncryptedBytes = decode (EncryptedMessage);
Cifra cifra = cifra.getInstance ("RSA/ECB/PKCS1Padding");
cifra.init (cifra.Decrypt_mode, privateKey);
byte [] descriptografmessage = cifra.dofinal (criptografado);
retornar nova string (descriptografada, "utf8");

byte privado [] decodifica (dados da string)
Retornar base64.getDecoder ().decodificar (dados);

public static void main (string [] args)
Rsa rsa = novo rsa ();
tentar
String EncryptedMessage = RSA.Encrypt ("Isso é Linuxhint.com ");
String descriptografada = RSA.descriptografar (criptografado);
Sistema.errar.println ("Criptografado: \ n"+criptografado);
Sistema.errar.println ("descriptografado: \ n"+descriptografado);
catch (exceção ignorada)

Em seguida, compilar o “RSA.Java”Arquivo escrevendo o seguinte comando:

$ javac rsa.Java

A compilação do arquivo especificado resultará em “RSA”Arquivo binário, execute -o para obter a saída da criptografia e descriptografia do PGP no seu terminal Linux:

$ java rsa

Da saída, você pode conferir as cordas criptografadas e descriptografadas:

Conclusão

A criptografia PGP permite enviar mensagens ou e -mails com segurança usando sua combinação de “Público" e "Privado" chaves. Para mostrar que um remetente é o legítimo proprietário de comunicação, ele fornece uma assinatura digital para chaves privadas e públicas. A criptografia PGP também é usada para confirmar se uma mensagem é entregue ao receptor pretendido ou não. Este artigo o guiou sobre Criptografia PGP em Java usando o RSA algoritmo. Além disso, também demonstramos um programa Java para criptografia e descriptografia PGP em nosso sistema Linux.