On Tuesday, October 18, 2016 at 11:17:09 PM UTC-4, Hoàng Hiệp wrote:
>
> I have problems using Crypto++ to save a RSA public key in string. When 
> decoding the key, I always get a BERDecodeErr exception.
>
> Code get public key and private key and is save to string
>
> KeyPairBase64 GenerateKeyPair::generateKeyPair(unsigned int aKeySize) {
>     KeyPairBase64 keyPair = KeyPairBase64();
>     // Generate keys
>     AutoSeededRandomPool rng;
>
>     InvertibleRSAFunction parameters;
>     parameters.GenerateRandomWithKeySize(rng, aKeySize);
>
>     RSA::PrivateKey privateKey(parameters);
>     RSA::PublicKey publicKey(parameters);
>
>     // save keys
>     publicKey.Save(CryptoPP::Base64Encoder(
>             new CryptoPP::StringSink(keyPair.publicKey)).Ref());
>     privateKey.Save(CryptoPP::Base64Encoder(
>             new CryptoPP::StringSink(keyPair.privateKey)).Ref());
>
>     return keyPair;
> }
>
>
> This is Public key: 
> MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDs648aASMAR9VprkzNVS7b‌​
> 36N1hiYvbBG0cdE0QkS3‌​H/sc3+Ej92lGBQErpBu9‌​LVhwN/beBX4QnbCn1eNS‌​
> rKoOzS4yqWlwOaCe0WLm‌​FDHCn1cMTkX89cT4A0pc‌​jBbY+0W7htxWcqHxEQH9‌​x/AjQ9/
> 4blerh1i6/lLI‌​o6hn2hB8kQIB
>
> Next I want to encrypt a string by public key (saved in string)
> Code: 
>
> string RsaEncryptor::encryptor(string plaintext, string publicKey) {
>     std::string cipher;
>     AutoSeededRandomPool prng;
>     try {
>         ByteQueue queue;
>         Base64Decoder decoder(new Redirector(queue));
>         decoder.Put((const byte *) publicKey.data(), publicKey.size());
>         decoder.MessageEnd();
>
>
>         RSA::PublicKey rsaPublick;
>         rsaPublick.BERDecodePublicKey(queue, false, (size_t) 
> queue.MaxRetrievable());
>
>         // BERDecodePrivateKey is a void function. Here's the only check
>         // we have regarding the DER bytes consumed.
>         CRYPTOPP_ASSERT(queue.IsEmpty());
>
>
>         bool valid = rsaPublick.Validate(prng, 3);
>         if (!valid)
>             cipher = "RSA private key is not valid";
>
>
>
>         RSAES_OAEP_SHA_Encryptor e(rsaPublick);
>
>         StringSource(plaintext, true,
>                      new PK_EncryptorFilter(prng, e,
>                                             new StringSink(cipher)
>                      ) // PK_EncryptorFilter
>         ); // StringSource
>     }
>     catch (CryptoPP::Exception &e) {
>         cipher = e.what();
>     }
>     return cipher;
> }
>
>
> But  I always get a BERDecodeErr exception. (I've been tried change 
> BERDecodePublicKey 
> to Load() but it really does not work.). Please just help me is wrong 
> somewhere. Learn well if you can guide me to fix.
>

The key is malformed. For the analysis, see 
http://stackoverflow.com/a/40121565/608639 .

Jeff 

-- 
-- 
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscr...@googlegroups.com.
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
--- 
You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cryptopp-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to