2016-10-30 7 views
0

secp192r1 커브를 사용하여 "키 쌍 생성"을 구현합니다. 그러나 공개 키처럼 개인 키가 문자열 형식으로 표시되지 않았습니다. 도와주세요. enter image description here 감사합니다. 당신은 OpenSSL을 문자열 표현을 얻을 수 있습니다 전에 PEM ​​형식으로 개인 키를 변환해야합니다ECC 키 쌍 - 개인 키 인쇄 방법?

package lam.bk; 
import java.security.*; 
import java.security.spec.*; 

public class ECCKeyGeneration { 
    public static void main(String[] args) throws Exception { 
     KeyPairGenerator kpg; 
     kpg = KeyPairGenerator.getInstance("EC","SunEC"); 
     ECGenParameterSpec ecsp; 
     ecsp = new ECGenParameterSpec("secp192r1"); 
     kpg.initialize(ecsp); 

     KeyPair kp = kpg.genKeyPair(); 
     PrivateKey privKey = kp.getPrivate(); 
     PublicKey pubKey = kp.getPublic(); 

     System.out.println(pubKey.toString()); 
     System.out.println(privKey.toString()); 
    } 
} 
+0

에 오신 것을 환영합니다! 좋은 질문을하고 좋은 대답을 얻으려면 [SO Question Checklist] (http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)를 검토하십시오. –

답변

0

:

여기 내 코드입니다. 자바에서 사용하여 프로그래밍 방식으로이 작업을 수행 할 수 있습니다 BouncyCastle 라이브러리의 PEMWriter

0

secp192r1 곡선 출력됩니다 아래의 코드 24 바이트 개인 키 : 스택 오버플로

private String getPrivateKeyAsHex(PrivateKey privateKey) { 

    ECPrivateKey ecPrivateKey = (ECPrivateKey) privateKey; 
    byte[] privateKeyBytes = new byte[24]; 
    writeToStream(privateKeyBytes, 0, ecPrivateKey.getS(), 24); 

    return Hex.toHexString(privateKeyBytes); 
} 

private void writeToStream(byte[] stream, int start, BigInteger value, int size) { 
    byte[] data = value.toByteArray(); 
    int length = Math.min(size, data.length); 
    int writeStart = start + size - length; 
    int readStart = data.length - length; 
    System.arraycopy(data, readStart, stream, writeStart, length); 
}