2017-03-05 5 views
0

base64에 ECDSA 개인 키 문자열이 있습니다 (이 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. PrivateKey를 생성 한 후에 다른 문자열에 서명해야합니다. 이를 위해 내가 다음 코드를 찾을 :

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