1

我最近一直在制作一个使用 AES256 加密/解密数据的服务器,它需要一段时间才能正确发送。但是现在我遇到了一个问题,我相信这取决于记忆,如果我发送“你好”这个词,它会很好地解密,如果我然后发送“你好”,它也会很好地解密,但如果我发送更短的内容比“你好”之后,它会在解密过程中出错,如果你打印它收到的加密字符串,它就会得到它应该有的东西加上旧字符串的额外长度。

例如

hello:  ####################
helloo: ##############################
hi:     #####(#########################) //has the additional length made up from the encrypted string of "helloo" minus the first however many characters "hi" is

编码:

std::string decryptString(std::string ciphertext, byte *key, byte *iv)
{
    std::string decodedtext;
    CryptoPP::StringSource(ciphertext, true, 
                           new CryptoPP::HexDecoder(new CryptoPP::StringSink(decodedtext)));

    std::string plaintext;

    CryptoPP::GCM<CryptoPP::AES>::Decryption dec;
    dec.SetKeyWithIV((const byte *)key, CryptoPP::AES::MAX_KEYLENGTH, 
                     (const byte *)iv, CryptoPP::AES::BLOCKSIZE);

    CryptoPP::AuthenticatedDecryptionFilter adf(dec, new CryptoPP::StringSink(plaintext));

    adf.Put((const byte *)decodedtext.data(), decodedtext.size());
    adf.MessageEnd();

    return plaintext;
}
4

2 回答 2

1

尝试使用 valgrind 查找代码中的内存错误。

哦,还有一个提示:发布代码本身,它可能会带来更有趣的答案。

于 2011-05-07T13:24:23.110 回答
0

如果您总是将相同的初始化向量传递给此方法,则可能原因就在其中。尝试

dec.Resynchronize(iv);
于 2013-10-01T10:30:23.130 回答