2016-07-23 138 views
1

我正在獲得「RSA/OAEP-MGF1(SHA- 1):當密文長度爲154時,該密鑰的長度爲192「,當我嘗試解密使用crypto ++庫的加密會話密鑰時。在解密會話密鑰時出現異常「RSA/OAEP-MGF1(SHA-1):密文長度154與該密鑰的所需長度192不匹配」

以下是相同的代碼片段:

std::string encrypt_session_key(PAES_KEY_WITH_IV pKey) 
{ 
     std::string ciphered; 
     CryptoPP::SecByteBlock block(pKey->key.size()); 

     try { 
       CryptoPP::RSAES< CryptoPP::OAEP<CryptoPP::SHA> >::Encryptor enc(RSA_master_pubKey); 
       enc.Encrypt(rng, pKey->key, pKey->key.size(), block); 
       ciphered.assign((char *)block.BytePtr()); 
     } 
     catch (const CryptoPP::Exception& e) 
     { 
       std::cerr << e.what() << std::endl; 
       b_success = false; 
     } 
     return ciphered; 
} 

PAES_KEY_WITH_IV decrypt_session_key(std::string & ciphered) 
{ 
     CryptoPP::SecByteBlock rec(ciphered.size()); 
     CryptoPP::SecByteBlock block((const byte *)ciphered.data(), ciphered.size()); 
     PAES_KEY_WITH_IV pKey = new AES_KEY_WITH_IV; 
     try { 
       CryptoPP::RSAES< CryptoPP::OAEP<CryptoPP::SHA> >::Decryptor dec(RSA_master_privKey); 
       dec.Decrypt(rng, block, block.size(), rec); 

       pKey->key = rec; 
     } 
     catch (const CryptoPP::Exception& e) 
     { 
       std::cerr << e.what() << std::endl; 
       b_success = false; 
     } 
     return pKey; 
} 

在這裏,我已經給了加密和解密的會話密鑰兩種代碼。

有人可以告訴我爲什麼我得到以上異常?

請注意:我正在使用crypto ++庫的5.6.3版本。

在此先感謝。

回答

0

ciphered.assign((char *)block.BytePtr());

密文可能會有嵌入NULL。你不能像char*那樣對待它。

使用fourth append overload相反,它提供了指針和緩衝區的長度:

ciphered.assign((char *)block.BytePtr(), block.SizeInBytes()); 

你還在其強制轉換爲char*得到它進入std::string對象。但它更像一個Rope - 它是一串沒有性格特徵的八位字節。

+0

將所有字節的大小分配給字符串後感謝,我可以解決此問題。 – user3752324

+0

現在我沒有得到任何異常,但是你能告訴我爲什麼原始和解碼的會話密鑰不一樣嗎? – user3752324

+0

最後字節差異 – user3752324

相關問題