2017-03-05 1 views
0

私はECDSA秘密鍵文字列をbase64で持っています(私はこの文字列をこのhttps://stackoverflow.com/a/8571649/7661555答えでregexpでチェックします)。Base64文字列からPrivateKeyを作成します。ECDSA秘密鍵

私はこの文字列からPrivateKeyインスタンスを生成しようとします。 私は私のプロジェクトでSpongyCastleを含め、このコードでそれを生成しよう:

 PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(encKey); 

     KeyFactory keyFactory = KeyFactory.getInstance("ECDSA", "SC"); 

     PrivateKey priv = keyFactory.generatePrivate(privKeySpec); 

しかし、私はこのコードを実行すると、私は次の例外を取得:

W/System.errの:java.securityを。 spec.InvalidKeySpecException:エンコードされたキー仕様が認識されない

私は何が間違っているのか教えてもらえますか?

P.S. PrivateKeyを生成した後、別の文字列に署名する必要があります。この目的のために iは、次のコードを見つける:

 Signature sig = Signature.getInstance("SHA256withECDSA"); 
     sig.initSign(priv); 
     sig.update(token.getBytes()); 

は、この正しい方法ですか?それとも何かが別の例外につながる可能性がありますか?

答えて

0

質問に記載した正規表現は、文字列がbase64でエンコードされているかどうかをチェックするだけです。

ECの秘密鍵からbase64文字列をどのように生成するのですか?

private String getBase64Value(PrivateKey privateKey) { 
    return Base64.encodeToString(privateKey.getEncoded(), Base64.NO_WRAP); 
} 

private PrivateKey reconstructPrivateKey(String base64Value) throws InvalidKeySpecException, NoSuchAlgorithmException { 
    KeyFactory kf = KeyFactory.getInstance("EC"); 
    byte[] bytes = Base64.decode(base64Value, Base64.NO_WRAP); 
    return kf.generatePrivate(new PKCS8EncodedKeySpec(bytes)); 
} 
関連する問題