Расшифровка CryptoPP AES-256-CB C на другом ПК не выполняется - PullRequest
0 голосов
/ 04 марта 2020

У меня есть код, который работает на более чем 10 различных ПК, но не работает на указанном c P C, который я не уверен, почему. Исключение составляет StreamTransformationFilter: invalid PKCS #7 block padding found

Данные шифруются в PHP с использованием openssl_encrypt с помощью метода AES-256-CB C, расшифровка выполняется на стороне клиента через CryptoPP. Код выглядит так:

std::string decrypt( const std::string& str_in, const std::string& key, const std::string& iv )
{
    std::string str_out;

    try
    {
        CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption decryption( ( byte* )key.data(), key.size(), ( byte* )iv.data() );

        CryptoPP::StringSource decryptor( str_in, true,
                                          new CryptoPP::StreamTransformationFilter( decryption,
                                          new CryptoPP::StringSink( str_out )
        )
        );
    }
    catch ( const CryptoPP::Exception& ex )
    { 
        MessageBox( NULL, ex.what(), qxor( "Decryption error" ), MB_ICONERROR | MB_OK );
    } 
    return str_out;
}

Я не понимаю, почему это работает на всех, кроме компьютера 1 человека. Они имеют ключевое значение, и iv не могут быть неправильными, так что об этом не может быть и речи, я был бы признателен за любые советы о том, как отладить эту проблему, так как я был в тупике в течение долгого времени.

1 Ответ

0 голосов
/ 04 марта 2020

(я пока не могу комментировать)

Подтвердили ли вы, что значение key.size () одинаково для всех компьютеров?

    CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption decryption( ( byte* )key.data(), key.size(), ( byte* )iv.data() );
...