C++ AES解密解密文本开头的16字节垃圾

C++ AES解密解密文本开头的16字节垃圾,c++,crypto++,C++,Crypto++,我有一个AES加密的文本,它是用Java在二进制文件中加密的。这是C++中使用CopTopp AES解密的输入 我能够用代码解密文本。但是我在解密文本的开头有一些垃圾字符。 我尝试删除二进制文件中的前16个字节的数据,假设这是IV。但这是数据,而不是二进制文本中的IV 这是我使用的代码 int main(int argc, char* argv[]) { try { string recovered; // Generate Cipher, Key, an

我有一个AES加密的文本,它是用Java在二进制文件中加密的。这是C++中使用CopTopp AES解密的输入 我能够用代码解密文本。但是我在解密文本的开头有一些垃圾字符。 我尝试删除二进制文件中的前16个字节的数据,假设这是IV。但这是数据,而不是二进制文本中的IV

这是我使用的代码

int main(int argc, char* argv[])
{
    try
    {
    string recovered;   

    // Generate Cipher, Key, and CBC
    byte key[ AES::DEFAULT_KEYLENGTH ], iv[ AES::BLOCKSIZE ];
    string sss = "9F28872C88AC24D0D1333DAAC6600A77";

    StringSource ss1((const byte*)sss.c_str(), sss.length(), true,
                 new HexDecoder(new CryptoPP::ArraySink(key, AES::DEFAULT_KEYLENGTH)));

    memset( iv, 0x00, AES::BLOCKSIZE );

        string encoded;

        CBC_Mode< AES >::Decryption d;


        d.SetKeyWithIV(key, sizeof(key),iv);

        CryptoPP::FileSource file_source("DecodedBase64-1.bin", true,new CryptoPP::StreamTransformationFilter(d,new CryptoPP::StringSink(recovered)));

        cout << "recovered text: " << recovered << endl;

    }
    catch(const CryptoPP::Exception& e)
    {
        cerr << e.what() << endl;
        exit(1);
    }

    /*********************************\
    \*********************************/

    return 0;
}

这听起来确实像是静脉注射。为什么你肯定不是?从加密文件中删除它将破坏解密。我们需要查看执行加密的Java代码,包括密钥和IV等参数的编码/解码方式。