2013-12-19 3 views
2

Я пишу новую версию программы на C++ с использованием библиотеки Qt и хочу поддерживать совместимость со старой версией, написанной на C#.Расшифровка DES с использованием OpenSSL 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]}' 

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

+1

Почему вы вставляете код C#? – lpapp

+0

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

+0

Да, я знаю, но в C# это работает. – Coder5546

ответ

1

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^