Пишу приложение на 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();
}