0% encontró este documento útil (0 votos)
184 vistas5 páginas

Codigo Del Algoritmo RCA

Este documento describe cómo implementar el algoritmo RSA en Java usando Netbeans. Se crean dos clases, una clase principal VentanaRSA que genera la interfaz gráfica y otra clase RSA que implementa la lógica del cifrado y descifrado RSA. La clase RSA genera números primos p y q, calcula la clave pública n y e, y la clave privada d. Luego se pueden cifrar y descifrar mensajes usando las claves.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
184 vistas5 páginas

Codigo Del Algoritmo RCA

Este documento describe cómo implementar el algoritmo RSA en Java usando Netbeans. Se crean dos clases, una clase principal VentanaRSA que genera la interfaz gráfica y otra clase RSA que implementa la lógica del cifrado y descifrado RSA. La clase RSA genera números primos p y q, calcula la clave pública n y e, y la clave privada d. Luego se pueden cifrar y descifrar mensajes usando las claves.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 5

Codiogo RSA en Java (Netbeans) Por: fabian molina

//clase principal
package RSA;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.math.BigInteger;

public class VentanaRSA extends JFrame implements ActionListener{

private JTextField cajaTamPrimo;


private JButton btnGenenerarClaves;
private ButtonGroup grupoBotonesOpcion;
private JRadioButton btnEncriptar, btnDesEncriptar;
private JTextArea areaOrigen, areaDestino;
private Container cntAreas, cntGenClaves;
private RSA rsa;
private BigInteger[] textoCifrado;

public VentanaRSA() {
super("YouTube - RSA");

getContentPane().setLayout(new BorderLayout(3,3));

cajaTamPrimo = new JTextField();


cajaTamPrimo.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent evt) {
generarClaves();
}
});

btnGenenerarClaves = new JButton("Generar Claves");


btnGenenerarClaves.addActionListener(this);

btnEncriptar = new JRadioButton("Encriptar", false);


btnEncriptar.addActionListener( new ManejadorBotonOpcion() );
btnEncriptar.setEnabled(false);
btnDesEncriptar = new JRadioButton("Desencriptar", false);
btnDesEncriptar.addActionListener( new ManejadorBotonOpcion() );
btnDesEncriptar.setEnabled(false);

grupoBotonesOpcion = new ButtonGroup();


grupoBotonesOpcion.add(btnEncriptar);
grupoBotonesOpcion.add(btnDesEncriptar);

areaOrigen = new JTextArea();


areaOrigen.setWrapStyleWord(true);
areaOrigen.setLineWrap(true);
areaDestino = new JTextArea();
areaDestino.setLineWrap(true);
areaDestino.setEditable(false);

cntAreas = new Container();


cntGenClaves = new Container();

cntGenClaves.setLayout(new GridLayout(2,3));
cntGenClaves.add(new JLabel("Tamaño del número primo: "));
cntGenClaves.add(cajaTamPrimo);
cntGenClaves.add(btnGenenerarClaves);
cntGenClaves.add(new JLabel("Texto a cifar/descifrar:"));
cntGenClaves.add(btnEncriptar);
cntGenClaves.add(btnDesEncriptar);

cntAreas.setLayout(new GridLayout(1,2,5,5));
cntAreas.add(new JScrollPane(areaOrigen));
cntAreas.add(new JScrollPane(areaDestino));

getContentPane().add(cntGenClaves, BorderLayout.NORTH);
getContentPane().add(cntAreas, BorderLayout.CENTER);

setSize(650,300);
setVisible(true);
}

public void actionPerformed( ActionEvent evento ) {


if(evento.getSource().equals(btnGenenerarClaves))
generarClaves();
}

private void generarClaves() {


if(cajaTamPrimo.getText().equals(""))
JOptionPane.showMessageDialog(null,"No haz introducido el tamaño del primo", "Tenemos
problemas", JOptionPane.ERROR_MESSAGE);
else {
rsa = new RSA(Integer.parseInt(cajaTamPrimo.getText()));
rsa.generaPrimos();
rsa.generaClaves();
JTextArea area = new JTextArea(20,50);
area.setEditable(false);
area.setLineWrap(true);
area.append("Tam clave: "+cajaTamPrimo.getText()+"\n\n");
area.append("p:["+rsa.damep()+"]\n\nq:["+rsa.dameq()+"]\n\n");
area.append("Clave publica (n,e):\n\nn:["+rsa.damen()+"]\n\ne:["+rsa.damee()+"]\n\n");
area.append("Clave publica (n,d):\n\nn:["+rsa.damen()+"]\n\nd:["+rsa.damed()+"]");
JOptionPane.showMessageDialog(null, new JScrollPane(area),"Primos generados",
JOptionPane.INFORMATION_MESSAGE);
btnEncriptar.setEnabled(true);
btnDesEncriptar.setEnabled(true);
}
}

// clase interna privada para manejar eventos de botón de opción


private class ManejadorBotonOpcion implements ActionListener {

// manejar eventos de botón de opción


public void actionPerformed( ActionEvent evento ) {
if(evento.getSource().equals(btnEncriptar)) {
if(areaOrigen.getText().equals(""))
JOptionPane.showMessageDialog(null,"No haz introducido datos para cifrar",
"Tenemos problemas", JOptionPane.ERROR_MESSAGE);
else {
textoCifrado = rsa.encripta(areaOrigen.getText());
areaDestino.setText("");
for(int i=0; i<textoCifrado.length; i++)
areaDestino.append(textoCifrado[i].toString());
}
} else if(evento.getSource().equals(btnDesEncriptar)) {
if(areaOrigen.getText().equals(""))
JOptionPane.showMessageDialog(null,"No haz introducido datos para decifrar",
"Tenemos problemas", JOptionPane.ERROR_MESSAGE);
else {
areaDestino.setText("");
String recuperarTextoPlano = rsa.desencripta(textoCifrado);
areaDestino.setText(recuperarTextoPlano);
}
}
}

public static void main(String args[]) {


JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
VentanaRSA ventana = new VentanaRSA();
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
// segunda clase RSA
package RSA;

import java.math.BigInteger;
import java.util.*;
import java.io.*;

public class RSA {

int tamPrimo;
BigInteger n, q, p;
BigInteger totient;
BigInteger e, d;

public RSA(int tamPrimo) {


this.tamPrimo = tamPrimo;
}

public void generaPrimos()


{
p = new BigInteger(tamPrimo, 10, new Random());
do q = new BigInteger(tamPrimo, 10, new Random());
while(q.compareTo(p)==0);
}

public void generaClaves()


{
// n = p * q
n = p.multiply(q);

totient = p.subtract(BigInteger.valueOf(1));
totient = totient.multiply(q.subtract(BigInteger.valueOf(1)));

do e = new BigInteger(2 * tamPrimo, new Random());


while((e.compareTo(totient) != -1) ||
(e.gcd(totient).compareTo(BigInteger.valueOf(1)) != 0));

d = e.modInverse(totient);
}

public BigInteger[] encripta(String mensaje)


{
int i;
byte[] temp = new byte[1];
byte[] digitos = mensaje.getBytes();
BigInteger[] bigdigitos = new BigInteger[digitos.length];

for(i=0; i<bigdigitos.length;i++){
temp[0] = digitos[i];
bigdigitos[i] = new BigInteger(temp);
}

BigInteger[] encriptado = new BigInteger[bigdigitos.length];

for(i=0; i<bigdigitos.length; i++)


encriptado[i] = bigdigitos[i].modPow(e,n);

return(encriptado);
}

public String desencripta(BigInteger[] encriptado) {


BigInteger[] desencriptado = new BigInteger[encriptado.length];

for(int i=0; i<desencriptado.length; i++)


desencriptado[i] = encriptado[i].modPow(d,n);

char[] charArray = new char[desencriptado.length];

for(int i=0; i<charArray.length; i++)


charArray[i] = (char) (desencriptado[i].intValue());

return(new String(charArray));
}

public BigInteger damep() {return(p);}


public BigInteger dameq() {return(q);}
public BigInteger dametotient() {return(totient);}
public BigInteger damen() {return(n);}
public BigInteger damee() {return(e);}
public BigInteger damed() {return(d);}
}

También podría gustarte