2012-07-05 10 views
11

¿Puede ayudarme a encontrar un tutorial sencillo de cómo firmar una cadena usando el algoritmo ECDSA en java? Pero sin usar ninguna biblioteca de terceros como bouncycastle. JDK 7. Me resultó difícil buscar un ejemplo simple, soy nuevo en la criptografía.Tutorial del algoritmo ECDSA para firmar una cadena


import java.io.*; 
import java.security.*; 

public class GenSig { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     /* 
     * Generate a DSA signature 
     */ 

     try { 

      /* 
      * Generate a key pair 
      */ 

      KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN"); 
      SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN"); 

      keyGen.initialize(1024, random); 

      KeyPair pair = keyGen.generateKeyPair(); 
      PrivateKey priv = pair.getPrivate(); 
      PublicKey pub = pair.getPublic(); 

      /* 
      * Create a Signature object and initialize it with the private key 
      */ 

      Signature dsa = Signature.getInstance("SHA1withDSA", "SUN"); 

      dsa.initSign(priv); 

      String str = "This is string to sign"; 
      byte[] strByte = str.getBytes(); 
      dsa.update(strByte); 

      /* 
      * Now that all the data to be signed has been read in, generate a 
      * signature for it 
      */ 

      byte[] realSig = dsa.sign(); 
      System.out.println("Signature: " + new String(realSig)); 


     } catch (Exception e) { 
      System.err.println("Caught exception " + e.toString()); 
     } 
    } 
} 

Cómo modificarlo para ECDSA?

+0

Look para cualquier ejemplo que usa DSA, pero el uso de estos algoritmos en su lugar: [proveedor de CE] (http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html #SunEC) –

+0

por ejemplo, si uso este tutorial, ¿qué debo cambiar aquí? http://www.java2s.com/Code/Java/Security/Testthesignature.htm o usando este http://docs.oracle.com/javase/tutorial/security/apisign/step1.html debo colocarlo en lugar de dsa ecdsa? – user1379574

+2

Por favor, acepte algunas respuestas haciendo clic en la marca V al lado de la correcta. O díganos (y en este caso GregS) por qué la pregunta no ha sido respondida satisfactoriamente. –

Respuesta

15

Aquí hay un pequeño ejemplo basado en su ejemplo.

import java.math.BigInteger; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.PrivateKey; 
import java.security.PublicKey; 
import java.security.SecureRandom; 
import java.security.Signature; 

public class ECDSAExample { 

    public static void main(String[] args) throws Exception { 
     /* 
     * Generate an ECDSA signature 
     */ 

     /* 
     * Generate a key pair 
     */ 

     KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC"); 
     SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); 

     keyGen.initialize(256, random); 

     KeyPair pair = keyGen.generateKeyPair(); 
     PrivateKey priv = pair.getPrivate(); 
     PublicKey pub = pair.getPublic(); 

     /* 
     * Create a Signature object and initialize it with the private key 
     */ 

     Signature dsa = Signature.getInstance("SHA1withECDSA"); 

     dsa.initSign(priv); 

     String str = "This is string to sign"; 
     byte[] strByte = str.getBytes("UTF-8"); 
     dsa.update(strByte); 

     /* 
     * Now that all the data to be signed has been read in, generate a 
     * signature for it 
     */ 

     byte[] realSig = dsa.sign(); 
     System.out.println("Signature: " + new BigInteger(1, realSig).toString(16)); 

    } 
} 
+1

¿Qué curva sería? P-256? –

+1

Temía que alguien lo preguntara. No sé, P-256 sería mi suposición sin embargo. –

+0

Sí, parece que –