[Qt-interest] QCA big string encryption
Jason H
scorp1us at yahoo.com
Sun Apr 24 21:06:22 CEST 2011
Generally you need an IV (Initialization vector) this then is fed to the
routines with the keys. The IV is an important random number so that if you can
encrypt the same message with the same keys multiple times and not get the same
encrypted message (thus ruling out a dictionary attack)
Anyway, there are two types of cyphers, block and stream. With block cyphers,
you work a block at a time. The last block will usually be incomplete, and there
is some final[ize[() method for handling this special block. Normally, the
enc/decrypt functions in QCA will give you all complete blocks, leaving you to
call finalize().
QCA does have convince functions that will do it all without you having to call
finalize(), HOWEVER this should only be used for messages of known, short
lengths. The non-convenience functions are designed to be used in a streaming
manner, which is better for memory and scalability.
HTH, but AFAIAC, this is a QCA question, not a Qt question.
----- Original Message ----
From: Nicholas Shatokhin <n.shatokhin at gmail.com>
To: qt-interest at qt.nokia.com; Jason H <scorp1us at yahoo.com>
Sent: Sun, April 24, 2011 2:52:53 PM
Subject: Re: [Qt-interest] QCA big string encryption
What do you mean?
There is my code below. What must I add? (I use 1024bit rsa key and message
truncate to 1024bit)
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();
}
Sun, 24 Apr 2011 21:31:38 +0300 було написано Jason H <scorp1us at yahoo.com>:
> It's beena while since I used QCA, but do you need to finalize() it for the
> last block?
>
>
>
>
> ----- Original Message ----
> From: Nicholas Shatokhin <n.shatokhin at gmail.com>
> To: qt-interest at qt.nokia.com
> Sent: Sun, April 24, 2011 1:12:41 PM
> Subject: [Qt-interest] QCA big string encryption
>
> Hello.
>
> I'm trying to encrypt end decrypt long string. But after decryption, I get
> only part of string. What's wrong?
>
> Code:
>
> QCA::SecureArray arg = data;
> qDebug() << arg.toByteArray();
> QCA::SecureArray result = publicKey.encrypt(arg, QCA::EME_PKCS1_OAEP);
> privateKey.decrypt(result, &arg, QCA::EME_PKCS1_OAEP);
> qDebug() << arg.toByteArray();
>
> Output:
>
> "{"method": 1, "data": {"email": "dfgh", "usePassword": "false",
> "password": "", "useFingerprint": false, "fingerprint": "", "publicKey":
>"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDN05UNjd6R1pHajZpbDc5K3ErOWo5K2s5cApnVHJJOGxRVlFoQkxuVWxBNFArS01selBEOU9aOEk0UXRWNEdjT0ZOYWFyTjByZFlacllKaVF2VjBUQkdSSnRWCnNEOTVsZzNPMHFzVHBuSVdrYW5rUTVFUmdiTDlqQ0grb0taNFBrUEd0OW9MVjhCOGphNjFRazdhLytBVUZ1UUQKeDBMUGZvUyt5VkVoYXNjM0x3SURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo="}
>}
> }"
>
> "{"method": 1, "data": {"email": "dfgh", "usePassword": "false",
> "password": "", "useFi"
>
>
> Best regards,
> Nick.
>
--За використання революційного клієнта електронної пошти Opera:
http://www.opera.com/mail/
More information about the Qt-interest-old
mailing list