Я пытался использовать OpenSSL с QT в последние несколько дней, но документация и примеры редки или отсутствуют.
В любом случае, я придумываю этот код:
void qkCrypto::AES_CBC(const unsigned char *string, const unsigned char *key, const unsigned char *iv)
{
int outlen;
unsigned char *out;
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx);
const EVP_CIPHER *cipher = EVP_aes_128_cbc();
EVP_EncryptInit(&ctx,cipher,key,iv);
EVP_EncryptUpdate(&ctx,out,&outlen,string,strlen(string));
EVP_EncryptFinal(&ctx,out,&outlen);
EVP_CIPHER_CTX_cleanup(&ctx);
qDebug() << out;
}
Но когда я его компилирую, я получаю некоторые ошибки ... это ошибки преобразования и приведения, и, поскольку я не лучший программист на C ++, я был бы очень признателен за помощь в их решении:
[...]/qkcrypto.cpp: In member function 'void qkCrypto::AES_CBC(const unsigned char*, const unsigned char*, const unsigned char*)':
[...]/qkcrypto.cpp:39: error: invalid conversion from 'const unsigned char*' to 'const char*'
[...]/qkcrypto.cpp:39: error: initializing argument 1 of 'size_t strlen(const char*)'
В любом случае, как я могу сделать это более дружественным к QT преобразованием символов в QByteArrays?
С наилучшими пожеланиями, спасибо всем;)
Обновление кода
I"возился", и я пытаюсь сделать это без всякой удачи:
void qkCrypto::AES_CBC(QByteArray string, QByteArray key, QByteArray iv)
{
int outlen;
QByteArray out;
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx);
const EVP_CIPHER *cipher = EVP_aes_128_cbc();
EVP_EncryptInit(&ctx,cipher, key.constData() , iv.constData() );
EVP_EncryptUpdate(&ctx, out.constData() ,&outlen, string.constData() ,strlen((const char*)string));
EVP_EncryptFinal(&ctx, out.constData() ,&outlen);
EVP_CIPHER_CTX_cleanup(&ctx);
qDebug() << "OUT: "<< out;
}
Я получил много ошибок относительно конверсий:
[...]/qkcrypto.cpp: In member function 'void qkCrypto::AES_CBC(QByteArray, QByteArray, QByteArray)':
[...]/qkcrypto.cpp:38: error: invalid conversion from 'const char*' to 'const unsigned char*'
[...]/qkcrypto.cpp:38: error: initializing argument 3 of 'int EVP_EncryptInit(EVP_CIPHER_CTX*, const EVP_CIPHER*, const unsigned char*, const unsigned char*)'
[...]/qkcrypto.cpp:38: error: invalid conversion from 'const char*' to 'const unsigned char*'
[...]/qkcrypto.cpp:38: error: initializing argument 4 of 'int EVP_EncryptInit(EVP_CIPHER_CTX*, const EVP_CIPHER*, const unsigned char*, const unsigned char*)'
[...]/qkcrypto.cpp:39: error: invalid conversion from 'const char*' to 'unsigned char*'
[...]/qkcrypto.cpp:39: error: initializing argument 2 of 'int EVP_EncryptUpdate(EVP_CIPHER_CTX*, unsigned char*, int*, const unsigned char*, int)'
[...]/qkcrypto.cpp:39: error: invalid conversion from 'const char*' to 'const unsigned char*'
[...]/qkcrypto.cpp:39: error: initializing argument 4 of 'int EVP_EncryptUpdate(EVP_CIPHER_CTX*, unsigned char*, int*, const unsigned char*, int)'
[...]/qkcrypto.cpp:41: error: invalid conversion from 'const char*' to 'unsigned char*'
[...]/qkcrypto.cpp:41: error: initializing argument 2 of 'int EVP_EncryptFinal(EVP_CIPHER_CTX*, unsigned char*, int*)'
Спасибо.