2012-07-05 42 views
11

Bạn có thể giúp tôi tìm một hướng dẫn đơn giản về cách ký chuỗi bằng thuật toán ECDSA trong java hay không. Nhưng không sử dụng bất kỳ thư viện của bên thứ ba nào như bouncycastle. Chỉ cần JDK 7. Tôi thấy khó tìm kiếm một ví dụ đơn giản, tôi mới sử dụng mật mã.Hướng dẫn thuật toán ECDSA để ký một chuỗi


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

Làm thế nào để sửa đổi nó cho ECDSA?

+0

Look cho bất kỳ ví dụ sử dụng DSA, nhưng sử dụng các thuật toán thay vì: [Nhà cung cấp EC] (http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html #SunEC) –

+0

ví dụ: nếu tôi sử dụng hướng dẫn này, tôi nên thay đổi điều gì ở đây? http://www.java2s.com/Code/Java/Security/Testthesignature.htm hoặc sử dụng http://docs.oracle.com/javase/tutorial/security/apisign/step1.html này tôi nên đặt thay vì dsa ecdsa? – user1379574

+2

Vui lòng chấp nhận một số câu trả lời bằng cách nhấp vào dấu V bên cạnh dấu chính xác. Hoặc cho chúng tôi biết (và trong trường hợp này là GregS) tại sao câu hỏi chưa được trả lời thỏa đáng. –

Trả lời

15

Đây là ví dụ nhỏ dựa trên ví dụ của bạn.

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

Đường cong đó sẽ là gì? P-256? –

+1

Tôi sợ ai đó sẽ hỏi điều đó. Tôi không biết, P-256 sẽ là phỏng đoán của tôi. –

+0

Yup, trông giống như nó –

Các vấn đề liên quan