Задать вопрос

Qt4 QCA: шифрование больших объемов информации по RSA?

Пишу приложение на qt4, в котором необходимо использовать симметричное шифрование. Но вот проблема — при шифровании данный обрезаются по длине ключа (т.е. если ключ в 1024 бита, то и на выходе получим только 128 байт информации, и после расшифровки мы получим только часть). В чем проблема? Как шифровать большие объемы данных?

bool CCryptor::generateKeys(int size)
{
    if(init())
    {
        QCA::PrivateKey seckey = QCA::KeyGenerator().createRSA(size);

        if(seckey.isNull())
        {
            std::cout << "Failed to make private RSA key" << std::endl;
            return false;
        }

        QCA::PublicKey pubkey = seckey.toPublicKey();

        privateKey = seckey;
        publicKey = pubkey;

        return true;
    }
    else
        return false;
}

QByteArray CCryptor::dataEnrypt(QByteArray data)
{
    // check if the key can encrypt
    if(!publicKey.canEncrypt())
    {
        std::cout << "Error: this kind of key cannot encrypt" << std::endl;
        return QByteArray();
    }

    QCA::SecureArray arg = data;

    // encrypt some data - note that only the public key is required
    // you must also choose the algorithm to be used
    QCA::SecureArray result = publicKey.encrypt(arg, QCA::EME_PKCS1_OAEP);

    if(result.isEmpty()) {
        std::cout << "Error encrypting" << std::endl;
        return QByteArray();
    }

    return result.toByteArray();
}

QByteArray CCryptor::dataDecrypt(QByteArray data)
{
    QCA::SecureArray encrypt = data;
    QCA::SecureArray decrypt;
    if(0 == privateKey.decrypt(encrypt, &decrypt, QCA::EME_PKCS1_OAEP))
    {
        std::cout << "Error decrypting.\n";
        return QByteArray();
    }

    return decrypt.data();
}
  • Вопрос задан
  • 4901 просмотр
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@WikiLeaks
Не буду конкретизировать, т.к никогда не работал с шифрованием в Qt (только «балуюсь» с C++).
Но скорее всего такое поведение обусловлено тем, что из за ресурсоемкости RSA не применяется для шифрования больших объемов информации.

Обычно большие массивы данных шифруются с помощью симметричных алгоритмов вроде AES (в QCA оно должно быть), при этом уже ключи шифруются с использованием RSA.
Именно так, если не ошибаюсь, устроены почти все популярные протоколы (SSL например) использующие ассиметричную криптографию.
Предпологаю, что в вашем случае именно так и нужно сделать.
Ответ написан
@Robotex Автор вопроса
Узнал, что QCA поддерживает OpenPGP (GnuPG), использование которого, вероятно, будет более безопасным и удобным, но нигде не нашел документации и примеров (в официальной всего несколько строк). Может кто-то помочь?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы