2017-02-04 10 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

関連する問題