PGP -kryptering i Java

PGP -kryptering i Java
PGP eller Ganske godt privatliv benytter en kombinasjon av kryptering, hash og datakomprimeringsteknikker for å kryptere og dekryptere meldinger, e -post og dokumenter. Den bruker et unikt nøkkelsystem, der en “Offentlig nøkkel”Og en“Privat nøkkel”Tilordnes til en bruker. For eksempel, når en bruker prøver å sende en melding ved å bruke den offentlige nøkkelen, krypterer PGP den spesifikke meldingen som hjelper til med å sikre den under overføring. Etter å ha mottatt den krypterte meldingen, bruker mottakeren eller mottakeren sin private nøkkel for å dekryptere meldingen.

PGP -kryptering med RSA -algoritme

PGP -tastaturet kan genereres ved hjelp av en rekke krypteringsalgoritmer; Men når du genererer PGP -nøklene manuelt, gir det imidlertid RSA som standardalgoritmealternativ. RSA -algoritmen ble opprettet av “Rivest-Shamir-Adleman”In 1978. Den bruker offentlige og private nøkler for datakryptering og dekryptering. For eksempel sender en klient serveren sin offentlige nøkkel og ber om noen data. Deretter krypterer serveren dataene ved hjelp av klientens offentlige nøkkel og sender dem til dem. Etter å ha mottatt dataene, dekrypterer klienten dem ved å bruke sin private nøkkel.

RSA tillater deg å sikre filen eller meldingen din før du sender dem. Ved å bruke RSA i PGP -krypteringsmetoden lar deg bekrefte dataene dine, slik at mottakeren vet om den blir endret eller endret under overføringen. Denne oppskrivningen vil guide deg om PGP -kryptering i Java bruker RSA algoritme. Videre vil vi også demonstrere et Java -program for PGP -kryptering og dekryptering i Linux. Så la oss starte!

Merk: Før du hopper inn i PGP -krypteringsprosessen i Java, må du installere Java JDK på Linux -systemet ditt hvis du ikke har det allerede.

Hvordan installere Java JDK 17 i Linux

For å installere Java JDK 17 På systemet ditt, for det første, trykk “Ctrl+alt+t”For å åpne opp terminalen og deretter utføre følgende Curl -kommando:

$ Curl -o https: // Last ned.Oracle.com/java/17/siste/jdk-17_linux-x64_bin.tjære.gz

Den feilfrie utdata erklærer at nedlastingen er fullført. Nå vil vi hente ut “jdk-17_linux-x64_bin.tjære.gz”Ved hjelp av det undergitte”tjære”Kommando:

$ tar -xvf jdk-17_linux-x64_bin.tjære.gz

I neste trinn vil vi flytte "JDK-17.0.1”Ekstrahert katalog til“/opt/" plassering:

$ sudo mv jdk-17.0.1 /opt /jdk17

Sett etter det Java -miljøvariabelen og legg til banen:

$ eksport java_home =/opt/jdk17

Til dette punktet har du installert og konfigurert Java JDK på systemet ditt. For bekreftelsesversjonen, skriv ut “Java”Kommando med“-versjon”Alternativ:

$ Java -Versjon

PGP -kryptering i Java ved bruk av RSA

Nå vil vi gå videre og lage et Java -program for å kryptere og dekryptere en melding ved hjelp av PGP -nøkler. Algoritmen vi skal bruke er “RSA”, Med“PKCS1”Polstring og“ECB”Blokkmodus. “ECB”Eller elektronisk kodebokmodus er den mest enkle tilnærmingen som brukes til å behandle en sekvens av meldingsblokker, mens“PKSC1”Polstring hjelper RSA med å definere de matematiske egenskapene til PGP -nøkkelparet og krypteringsprosessen.

Først av alt vil vi lage en "RSA”Klasse:

offentlig klasse RSA

Dette “RSA”Klasse vil ha to variabler,“PrivatKey" og "publicKey”:

Private PrivateKey PrivateKey;
privat publicKey PublicKey;

Vi vil tilordne verdien til de definerte PGP -nøklene ved å bruke en “Keypairgenerator”. “Keypairgenerator”Vil bruke“RSA”Algoritme for å generere PGP -tastaturverdiene i konstruktøren av RSA -klasse:

public rsa ()
prøv
Keypairgenerator Generator = Keypairgenerator.getInstance ("RSA");
generator.initialiser (1024);
Tastaturpar = generator.generateKeyPair ();
PrivateKey = par.getPrivate ();
publicKey = par.getPublic ();
fangst (unntak ignorert)

I neste trinn vil vi lage en "kode ()”Og“dekode()”Funksjon som vil bli brukt til å kode og avkode meldingen med“Base64”(Binær til tekst) Encoder og dekoder:

Privat streng kode (byte [] data)
Returbase64.getEncoder ().EnkodetoString (data);

privat byte [] dekode (strengdata)
Returbase64.getDecoder ().avkode (data);

Nå, legg til en Krypter () Funksjon i RSA -klassen. I “Krypter ()”Funksjon, vil vi først konvertere den ekstra meldingen til byte, da den spesifiserte krypteringen kan gjøres ved hjelp av en byte -matrise. Etter å ha gjort det, vil vi spesifisere algoritmen, blokkeringsmodus og polstring som "RSA/ECB/PKCS1Padding" for en "chiffer”Objekt. Deretter vil vi initialisere chifferen med "Encrypt_mode”Og PGP”publicKey”.

Denne Encrypt () -funksjonen vil bruke vår PGP “publicKey”For å kryptere meldingen og returnere de krypterte byteene:

public String Encrypt (strengmelding) kaster unntak
byte [] messageToBytes = melding.getBytes ();
Cipher Cipher = Cipher.GetInstance ("RSA/ECB/PKCS1Padding");
chiffer.init (chiffer.Encrypt_mode, publicKey);
byte [] kryptertbyte = chiffer.Dofinal (MessageTobytes);
Return Encode (kryptertbyte);

Tilsvarende vil vi definere en annen funksjon som heter “dekryptere ()”For å avkode strengene som vil bruke vår PGP”PrivatKey”For å dekryptere den krypterte meldingen i “DECRYPT_MODE” og returner den dekrypterte matrisen:

public String Decrypt (String EncryptedMessage) kaster unntak
byte [] kryptertebyte = dekode (kryptert Message);
Cipher Cipher = Cipher.GetInstance ("RSA/ECB/PKCS1Padding");
chiffer.init (chiffer.Decrypt_Mode, PrivateKey);
byte [] dekryptertMessage = Cipher.Dofinal (kryptertbyte);
Returner ny streng (dekryptertMessage, "UTF8");

La oss nå sjekke "hoved()" Metodefunksjonalitet. I “hoved(),”For det første vil vi definere to strenger”KryptertMessage”Og“DecryptedMessage”. De “KryptertMessage” vil omfatte den krypterte formen for vår ekstra streng "Dette er Linuxhint.com”Som vi vil kryptere ved hjelp av RSA -kryptering () -funksjonen, og“DecryptedMessage”Variabel vil lagre den dekrypterte meldingen:

public static void main (String [] args)
RSA RSA = ny RSA ();
prøve
Streng EncryptedMessage = RSA.Krypter ("Dette er Linuxhint.com ");
Streng dekryptertMessage = RSA.Decrypt (kryptert Message);
System.feil.println ("Kryptert: \ n"+kryptertMessage);
System.feil.println ("dekryptert: \ n"+dekrypteringsmessage);
fangst (unntak ignorert)

Implementering av PGP -kryptering i Java

Vi håper at våre gitte instruksjoner hjalp deg til å forstå den gitte koden ovenfor. Denne delen vil implementere den medfølgende PGP -kryptering Java -koden på Linux -systemet vårt for å vise deg utdataene. For dette formålet vil vi for det første lage en "RSA.Java”Java -filen ved hjelp av“Nano”Redaktør:

$ sudo nano rsa.Java

Din “RSA.Java ” filen vil i utgangspunktet se slik ut:

Legg nå til følgende kode i "RSA.Java”Fil og trykk“Ctrl+O”For å lagre de ekstra endringene:

Importer Javax.krypto.Chiffer;
Importer Java.sikkerhet.Tastatur;
Importer Java.sikkerhet.Keypairgenerator;
Importer Java.sikkerhet.PrivatKey;
Importer Java.sikkerhet.PublicKey;
Importer Java.util.Base64;
offentlig klasse RSA
Private PrivateKey PrivateKey;
privat publicKey PublicKey;
public rsa ()
prøv
Keypairgenerator Generator = Keypairgenerator.getInstance ("RSA");
generator.initialiser (1024);
Tastaturpar = generator.generateKeyPair ();
PrivateKey = par.getPrivate ();
publicKey = par.getPublic ();
fangst (unntak ignorert)


public String Encrypt (strengmelding) kaster unntak
byte [] messageToBytes = melding.getBytes ();
Cipher Cipher = Cipher.GetInstance ("RSA/ECB/PKCS1Padding");
chiffer.init (chiffer.Encrypt_mode, publicKey);
byte [] kryptertbyte = chiffer.Dofinal (MessageTobytes);
Return Encode (kryptertbyte);

Privat streng kode (byte [] data)
Returbase64.getEncoder ().EnkodetoString (data);

public String Decrypt (String EncryptedMessage) kaster unntak
byte [] kryptertebyte = dekode (kryptert Message);
Cipher Cipher = Cipher.GetInstance ("RSA/ECB/PKCS1Padding");
chiffer.init (chiffer.Decrypt_Mode, PrivateKey);
byte [] dekryptertMessage = Cipher.Dofinal (kryptertbyte);
Returner ny streng (dekryptertMessage, "UTF8");

privat byte [] dekode (strengdata)
Returbase64.getDecoder ().avkode (data);

public static void main (String [] args)
RSA RSA = ny RSA ();
prøve
Streng EncryptedMessage = RSA.Krypter ("Dette er Linuxhint.com ");
Streng dekryptertMessage = RSA.Decrypt (kryptert Message);
System.feil.println ("Kryptert: \ n"+kryptertMessage);
System.feil.println ("dekryptert: \ n"+dekrypteringsmessage);
fangst (unntak ignorert)

Deretter kan du kompilere “RSA.Java”Fil ved å skrive ut følgende kommando:

$ Javac RSA.Java

Samlingen av den spesifiserte filen vil resultere en "RSA”Binær fil, utfør den for å få utdataene fra PGP -kryptering og dekryptering i Linux -terminalen din:

$ Java RSA

Fra utgangen kan du sjekke ut de krypterte og dekrypterte strengene:

Konklusjon

PGP -kryptering tillater deg å sende meldinger eller e -postmeldinger sikkert ved å bruke kombinasjonen av "Offentlig”Og“Privat”Nøkler. For å vise at en avsender er den rettmessige eieren av kommunikasjonen, gir den en digital signatur for private og offentlige nøkler. PGP -kryptering brukes også til å bekrefte om en melding blir levert til den tiltenkte mottakeren eller ikke. Denne oppskrivningen ledet deg om PGP -kryptering i Java bruker RSA algoritme. Videre demonstrerte vi også et Java -program for PGP -kryptering og dekryptering i vårt Linux -system.