Advertisement
Guest User

Untitled

a guest
Mar 7th, 2013
663
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.30 KB | None | 0 0
  1. /*
  2.     Author:     Alberto Gil Tesa
  3.     WebSite:    http://giltesa.com
  4.     License:    CC BY-NC-SA 3.0
  5.                 http://goo.gl/CTYnN
  6.  
  7.     File:       MainCifrarFirmar.java
  8.     Date:       26/02/2013
  9.    
  10.     NOTAS:
  11.        El cliente firma con su privada
  12.        Despues cifra con la publica del servidor
  13.            
  14.        El servidor descifra con su privada
  15.        Despues desfirma con la publica del cliente
  16. */
  17.  
  18.  
  19. import java.math.BigInteger;
  20.  
  21.  
  22. public class MainCifrarFirmarPlus
  23. {
  24.     public static void main(String[] args)
  25.     {
  26.        
  27.         // Lo primero es crear dos objetos RSA, el primero hara de Cliente y el segundo de Servidor.
  28.         // Cada uno cuenta con sus claves publicas y privadas generadas:
  29.         // Estas claves solo se usarán para transmitir la nueva clave publica (cifrada y firmada)
  30.         Rsa inseguraC = new Rsa(1024);
  31.         Rsa inseguraS = new Rsa(1024);
  32.        
  33.         // Se crean otro par de claves (las definitivas)
  34.         Rsa seguraC = new Rsa(1024);
  35.         Rsa seguraS = new Rsa(1024);
  36.        
  37.         // Se extrae la clave publica buena
  38.         BigInteger clientec0 = seguraC.getPublicKey()[0];
  39.         BigInteger clientec1 = seguraC.getPublicKey()[1];
  40.        
  41.         // El Cliente firma con su privada:
  42.         BigInteger firmadoc0 = inseguraC.encrypt(clientec0, inseguraC.getPrivateKey());
  43.         BigInteger firmadoc1 = inseguraC.encrypt(clientec1, inseguraC.getPrivateKey());
  44.  
  45.         // El Cliente cifra con la publica del servidor:
  46.         BigInteger cifradoc0 = inseguraC.encrypt(firmadoc0, inseguraS.getPublicKey());
  47.         BigInteger cifradoc1 = inseguraC.encrypt(firmadoc1, inseguraS.getPublicKey());
  48.  
  49.         // El Servidor usa su clave privada para descifrar:
  50.         BigInteger descifradoc0 = inseguraS.decrypt(cifradoc0);
  51.         BigInteger descifradoc1 = inseguraS.decrypt(cifradoc1);
  52.  
  53.         // El Servidor usa la clave publica del cliente para Desfirmar:
  54.         BigInteger desfirmadoc0 = inseguraS.decrypt(descifradoc0, inseguraC.getPublicKey());
  55.         BigInteger desfirmadoc1 = inseguraS.decrypt(descifradoc1, inseguraC.getPublicKey());
  56.        
  57.         /* Ahora el servidor tiene una nueva clave publica, que puede usar para enviar
  58.          * mensajes al cliente de manera más segura todavía.*/
  59.        
  60.         // Estos son los datos que se van a cifrar y descifrar:
  61.         byte[] misDatos = new byte[] { 'H', 'o', 'l', 'a', ' ', 'm', 'u', 'n', 'd', 'o', '!' };
  62.        
  63.         BigInteger cifrado = seguraS.encrypt(new BigInteger(misDatos), new BigInteger[]{desfirmadoc0,desfirmadoc1});
  64.         BigInteger descifrado = seguraC.decrypt(cifrado);
  65.         /* Se deberia hacer el mismo proceso con la clave publica seguraS para enviarsela al cliente
  66.         Y aun seria mas seguro si se cifra y se firma (no necesario ya que sabemos con seguridad
  67.         que la nueva clave publica la tiene solo el receptor) */
  68.        
  69.  
  70.         // Y por ultimo se imprime por pantalla el BigInteger pasandolo a un array de chars:
  71.         byte[] array = descifrado.toByteArray();
  72.  
  73.         // Se recorre el array:
  74.         if( array.length > 0 )
  75.         {
  76.             System.out.println("Mensaje:");
  77.             for( int i = 0 ; i < array.length ; i++ )
  78.                 System.out.print((char)array[i]);
  79.         }
  80.  
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement