2012-07-05 26 views
11

Java'da ECDSA algoritması kullanarak bir dizeyi imzalamanın nasıl basit bir öğretici bulmamda yardımcı olabilir misiniz? Ama bouncycastle gibi üçüncü parti kütüphaneler kullanmadan. Sadece JDK 7. Basit bir örnek aramak zor buldum, ben şifreleme için yeniyim.Bir dize imzalamak için ECDSA algoritmasının öğreticisi


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

Nasıl ECDSA için değiştirmek?

+0

Görünüş: [EC sağlayıcı] (http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html #SunEC) –

+0

Örneğin, bu eğiticiyi kullanırsam, burada neyi değiştirmeliyim? http://www.java2s.com/Code/Java/Security/Testthesignature.htm veya bunu kullanarak http://docs.oracle.com/javase/tutorial/security/apisign/step1.html yerine dsa yerleştirmeliyim ECDSA? – user1379574

+2

Lütfen doğru cevapların yanındaki V işaretini tıklayarak bazı cevapları kabul edin. Ya da bize (ve bu durumda GregS) sorunun neden tatmin edici bir şekilde cevaplanmadığını söyleyin. –

cevap

15

Örneğinize göre küçük bir örnek. DSA kullanır, ancak bunun yerine, bu algoritmaları kullanan örneğin

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

Bu hangi eğri olurdu? P-256? –

+1

Birinin bunu sormasından korkuyordum. Bilmiyorum, P-256 benim tahminim olurdu. –

+0

Yup, –

İlgili konular