2012-07-05 6 views
11

Können Sie mir helfen, ein einfaches Tutorial zu finden, wie eine Zeichenfolge mit ECDSA-Algorithmus in Java signieren. Aber ohne die Verwendung von Bibliotheken von Drittanbietern wie Bouncycastle. Just JDK 7. Ich fand es schwierig, ein einfaches Beispiel zu suchen, ich bin neu in der Kryptographie.Tutorial von ECDSA-Algorithmus, um eine Zeichenfolge zu signieren


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()); 
     } 
    } 
} 

Wie es für ECDSA ändern?

+0

Blick für jedes Beispiel, das DSA verwendet, sondern verwendet diese Algorithmen statt: [EC-Provider] (http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html #SunEC) –

+0

zum Beispiel, wenn ich dieses Tutorial verwende, was soll ich hier ändern? http://www.java2s.com/Code/Java/Security/Testthesignature.htm oder mit dieser http://docs.oracle.com/javase/tutorial/security/apisign/step1.html sollte ich anstelle von dsa platzieren Ecdsa? – user1379574

+2

Bitte akzeptieren Sie einige Antworten, indem Sie auf das V-Zeichen neben dem richtigen klicken. Oder sagen Sie uns (und in diesem Fall GregS), warum die Frage nicht zufriedenstellend beantwortet wurde. –

Antwort

15

Hier ist ein kleines Beispiel basierend auf Ihrem Beispiel.

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

Welche Kurve wäre das? P-256? –

+1

Ich hatte Angst, dass jemand das fragen würde. Ich weiß es nicht, P-256 wäre meine Vermutung. –

+0

Yup, sieht aus wie es –