2017-02-04 3 views
1

나는 만들고있는 프로그램에 대한 도우미 함수를 작성하려고하며 키를 문자열로 반환해야합니다. RSA 키를 PrivateKey/PublicKey에서 Base64 문자열로 변환하는 방법을 찾았습니다.Crypto ++에서 Base64 RSA 키를로드하는 방법

int main() 
{ 
    //Generate params 
    AutoSeededRandomPool rng; 
    InvertibleRSAFunction params; 
    params.Initialize(rng, 4096); 

    //Generate Keys 
    RSA::PrivateKey privKey(params); 
    RSA::PublicKey pubKey(params); 

    //Encode keys to Base64 
    string encodedPriv, encodedPub; 

    Base64Encoder privKeySink(new StringSink(encodedPriv)); 
    privKey.DEREncode(privKeySink); 

    Base64Encoder pubKeySink(new StringSink(encodedPub)); 
    privKey.DEREncode(pubKeySink); 

    RSA::PrivateKey pvKeyDecoded; 
    RSA::PublicKey pbKeyDecoded; 

    //how to decode... 

    system("pause"); 
    return 0; 
} 

이제 인코딩 된 키를 다시로드하려면 어떻게해야합니까? 나는 그것에 관한 어떤 정보도 찾을 수 없었다.

답변

1
RSA::PrivateKey pvKeyDecoded; 
RSA::PublicKey pbKeyDecoded; 

//how to decode... 

당신은 같은 작업을 수행 할 수 있습니다

StringSource ss(encodedPriv, true, new Base64Decoder); 
pvKeyDecoded.BERDecode(ss); 

또한이 해결해야

Base64Encoder pubKeySink(new StringSink(encodedPub)); 
privKey.DEREncode(pubKeySink); // pubKey.DEREncode 

을 그리고 키가 작성되면 당신은 MessageEnd()를 호출해야 :

Base64Encoder privKeySink(new StringSink(encodedPriv)); 
privKey.DEREncode(privKeySink); 
privKeySink.MessageEnd(); 

Base64Encoder pubKeySink(new StringSink(encodedPub)); 
pubKey.DEREncode(pubKeySink); 
pubKeySink.MessageEnd(); 

Crypto ++ wiki에서 도움이되는 Keys and Formats을 찾을 수도 있습니다.

+0

이전에 키 및 형식 링크에서 시도했지만 BER 디코딩 오류 예외가 발생했습니다. 사실 나는 wiki에서 거의 모든 것을 시도했지만 아무 소용이 없었다. 그래서 제가 여기서 도움을 청했습니다. 다시 시도했지만 작동하지 않았습니다. – Kyojin

+0

@Kyojin - 위의 편집을 참조하십시오. 다음 번에 간결한 질문을하십시오. 귀하의 질문에 Base64로 인코딩 된 키를로드하는 방법이 나와 있습니다. 제공되지 않은 코드로 인해 예외가 발생했다고 언급하지 않았습니다. – jww

+0

고마워요! 예외를 언급하지 않아서 죄송합니다. 다음에 더 잘 물어볼 것입니다. – Kyojin