2012-04-12 12 views
1

公開鍵をBigIntegerに変換する必要があります。下のコードで私は秘密鍵を抽出し、BigIntegerとして保存しました。しかし、私が同じ方法を公衆のために実行したとき、それは機能していません。 ECDSAで公開鍵をBigIntegerに変換する方法

public static void main(String[] args) throws Exception { 
    Security.addProvider(new BouncyCastleProvider()); 
    BigInteger ZERO=new BigInteger("0"); 
    int c; 
    // ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("P-224"); 
    ECCurve curve = new ECCurve.Fp(
      new  BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), // q 
      new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), // a 
      new BigInteger("6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a", 16)); // b 

    ECParameterSpec ecSpec = new ECParameterSpec(
      curve, 
      curve.decodePoint(Hex.decode("020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf")), // G 
       new BigInteger("883423532389192164791648750360308884807550341691627752275345424702807307")); // n 
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("ECDSA", "BC"); 
    kpg.initialize(ecSpec, new SecureRandom()); 
    KeyPair keyPair = kpg.generateKeyPair(); 
    PublicKey pubKey = keyPair.getPublic(); 
    System.out.println(pubKey); 
    PrivateKey privKey = keyPair.getPrivate(); 
    System.out.println(privKey); 
    BigInteger s = ((ECPrivateKey) privKey).getS(); 
    System.out.println(s); 
+2

どのように動作しませんか?例外はありますか? – serg10

+0

@ user1208304あなたは[コードのその部分を持っている](http://www.bouncycastle.org/wiki/display/JA1/Elliptic+Curve+Key+Pair+Generation+and+Key+Factories)に言及したいかもしれません。 。 – martijno

答えて

1

秘密鍵はBigIntegerが、公開鍵はECPoint(二BigInteger値からなる)です。 BigIntegerに変換することはできません。使用

ECPoint w = ((ECPublicKey)pubKey).getW(); 
BigInteger wx = w.getAffineX(), wy = w.getAffineY(); 
System.out.println(wx); 
System.out.println(wy); 
関連する問題