Расшифровка DES с использованием OpenSSL Qt, переполнение стека

Я пишу новую версию программы на C ++ с использованием библиотеки Qt и хочу сохранить совместимость со старой версией, написанной на C #.

Как я могу преобразовать этот код в C ++ / Qt?

DESCryptoServiceProvider dESCryptoServiceProvider = new DESCryptoServiceProvider();
emoryStream stream = new  MemoryStream(Convert.FromBase64String(p0));
CryptoStream stream2 = new CryptoStream(stream,     dESCryptoServiceProvider.CreateDecryptor(Encoding.ASCII.GetBytes("B5B126C5"),
Encoding.UTF32.GetBytes("0907427F93EC3A3FCFDFEBE3CB55011")), CryptoStreamMode.Read);
StreamReader streamReader = new StreamReader(stream2);
String text = streamReader.ReadToEnd();

Мой собственно код Qt / C ++:

        QByteArray encrypted = code.toLatin1();
encrypted = QByteArray::fromBase64(encrypted);

/////////////////////////////////////////////////////////////////////////////////////
DES_cblock key = { 0x9, 0x7, 0x42, 0x7, 0xf9, 0x3e, 0xC3, 0xa3, 0xfC, 0xfd, 0xfe, 0xbe, 0x3c, 0xb5, 0x50, 0x85 };
//this key is too long...

///////////////////////////////////////////////////////////////////////////////////////
DES_cblock iv = { 0xB5, 0xb1, 0x26, 0xc11 };

DES_key_schedule schedule;
unsigned char decrypted[encrypted.size()];

DES_set_odd_parity(&key);
DES_set_key_checked(&key, &schedule);
DES_ncbc_encrypt((unsigned char * )encrypted.constData(), (unsigned char * )decrypted, encrypted.size(), &schedule, &iv, DES_DECRYPT);
unsigned int data_size = 0;

QString text = QByteArray::fromRawData((char * )decrypted, data_size);

Когда я пытаюсь собрать получить сообщение об ошибке:

C:\Project1_Qt\trunk\Core\OldHashDecoder.cpp:1383: error: too many initializers for 'DES_cblock {aka unsigned char [8]}'

Пожалуйста помоги
С наилучшими пожеланиями

2

Решение

У вас есть несколько проблем здесь продолжается.

  • Кажется, у вас есть длинный ключ, как вы отметили в комментарии. Вам нужно будет сделать это короче.

  • Ключи DES имеют фиксированную длину, как справедливо отмечено в комментарии.

  • Вы не можете исправить 0xc11 одним байтом.

Что касается кода C #, вы вставили, я не уверен. Я не очень хорош в этом языке, но, возможно, он молча обрезал для вас длину.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]