Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Author: Alberto Gil Tesa
- WebSite: http://giltesa.com
- License: CC BY-NC-SA 3.0
- http://goo.gl/CTYnN
- File: MainCifrarFirmar.java
- Date: 26/02/2013
- NOTAS:
- El cliente firma con su privada
- Despues cifra con la publica del servidor
- El servidor descifra con su privada
- Despues desfirma con la publica del cliente
- */
- import java.math.BigInteger;
- public class MainCifrarFirmarPlus
- {
- public static void main(String[] args)
- {
- // Lo primero es crear dos objetos RSA, el primero hara de Cliente y el segundo de Servidor.
- // Cada uno cuenta con sus claves publicas y privadas generadas:
- // Estas claves solo se usarán para transmitir la nueva clave publica (cifrada y firmada)
- Rsa inseguraC = new Rsa(1024);
- Rsa inseguraS = new Rsa(1024);
- // Se crean otro par de claves (las definitivas)
- Rsa seguraC = new Rsa(1024);
- Rsa seguraS = new Rsa(1024);
- // Se extrae la clave publica buena
- BigInteger clientec0 = seguraC.getPublicKey()[0];
- BigInteger clientec1 = seguraC.getPublicKey()[1];
- // El Cliente firma con su privada:
- BigInteger firmadoc0 = inseguraC.encrypt(clientec0, inseguraC.getPrivateKey());
- BigInteger firmadoc1 = inseguraC.encrypt(clientec1, inseguraC.getPrivateKey());
- // El Cliente cifra con la publica del servidor:
- BigInteger cifradoc0 = inseguraC.encrypt(firmadoc0, inseguraS.getPublicKey());
- BigInteger cifradoc1 = inseguraC.encrypt(firmadoc1, inseguraS.getPublicKey());
- // El Servidor usa su clave privada para descifrar:
- BigInteger descifradoc0 = inseguraS.decrypt(cifradoc0);
- BigInteger descifradoc1 = inseguraS.decrypt(cifradoc1);
- // El Servidor usa la clave publica del cliente para Desfirmar:
- BigInteger desfirmadoc0 = inseguraS.decrypt(descifradoc0, inseguraC.getPublicKey());
- BigInteger desfirmadoc1 = inseguraS.decrypt(descifradoc1, inseguraC.getPublicKey());
- /* Ahora el servidor tiene una nueva clave publica, que puede usar para enviar
- * mensajes al cliente de manera más segura todavía.*/
- // Estos son los datos que se van a cifrar y descifrar:
- byte[] misDatos = new byte[] { 'H', 'o', 'l', 'a', ' ', 'm', 'u', 'n', 'd', 'o', '!' };
- BigInteger cifrado = seguraS.encrypt(new BigInteger(misDatos), new BigInteger[]{desfirmadoc0,desfirmadoc1});
- BigInteger descifrado = seguraC.decrypt(cifrado);
- /* Se deberia hacer el mismo proceso con la clave publica seguraS para enviarsela al cliente
- Y aun seria mas seguro si se cifra y se firma (no necesario ya que sabemos con seguridad
- que la nueva clave publica la tiene solo el receptor) */
- // Y por ultimo se imprime por pantalla el BigInteger pasandolo a un array de chars:
- byte[] array = descifrado.toByteArray();
- // Se recorre el array:
- if( array.length > 0 )
- {
- System.out.println("Mensaje:");
- for( int i = 0 ; i < array.length ; i++ )
- System.out.print((char)array[i]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement