2012-07-05 14 views
11

Czy możesz mi pomóc znaleźć prosty samouczek, jak podpisać ciąg znaków za pomocą algorytmu ECDSA w java. Ale bez użycia bibliotek innych firm, takich jak bouncycastle. Po prostu JDK 7. Trudno było znaleźć prosty przykład, jestem nowy w kryptografii.Samouczek algorytmu ECDSA do podpisania ciągu znaków


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

Jak zmodyfikować go do ECDSA?

+0

Look dla każdego przykładu, który używa DSA, ale zamiast wykorzystać te algorytmy: [dostawca WE] (http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html #SunEC) –

+0

na przykład, jeśli używam tego samouczka, co mam tutaj zmienić? http://www.java2s.com/Code/Java/Security/Testthesignature.htm lub używając tego http://docs.oracle.com/javase/tutorial/security/apisign/step1.html powinienem umieścić zamiast dsa ecdsa? – user1379574

+2

Proszę zaakceptować niektóre odpowiedzi, klikając znak V obok właściwego. Lub powiedz nam (w tym przypadku GregS), dlaczego odpowiedź na pytanie nie jest satysfakcjonująca. –

Odpowiedz

15

Oto mały przykład na podstawie Twojego przykładu.

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

Jaka to by była krzywizna? P-256? –

+1

Bałem się, że ktoś o to poprosi. Nie wiem, P-256 byłby jednak moim domysłem. –

+0

Tak, wygląda na to –