我最近一直在制作一个使用 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;
}