Как сгенерировать расписание ключей для дешифрования openssl 3des на iphone - PullRequest
0 голосов
/ 10 февраля 2011

Мне нужно расшифровать некоторые данные, которые были закодированы в 3des в системе, работающей в моно (C #)

Мне нужно использовать openssl и расшифровать на iPhone.

Я нашел пример, который выглядит следующим образом, и он работает без ошибок на iphone, когда у меня установлен openssl и т. Д., Но выдает неправильный результат для моего теста, который я проверил в системе кодирования. Вектор инициализации верен, но на что мне следует установить расписание ключей, поскольку единственная информация, которую я имею, - это ввод?

   DES_cblock ivec[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};   
   DES_key_schedule  ks1, ks2, ks3; 

   // What (and how) should I set ks1/2/3 to?

   DES_ede3_cbc_encrypt(input,output, 24*8, &ks1, &ks2, &ks3,ivec, DES_DECRYPT);

Декодирование в моно-системе выполняется с помощью следующего кода;

   TripleDESCryptoServiceProvider m_des = new TripleDESCryptoServiceProvider();

   byte[] IV ={0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
   m_des.KeySize = 24*8;

   MemoryStream memStream = new MemoryStream();
   CryptoStream cryptStream = new CryptoStream(memStream,m_des.CreateDecryptor(key, IV), CryptoStreamMode.Write);

   cryptStream.Write(input, 0, input.Length);
   cryptStream.FlushFinalBlock();

Насколько я могу судить, расписание клавиш не указано, поэтому я не знаю, как его установить? Я думаю, это происходит от ключа ... пенни начинает падать ... но как?

Есть идеи? (в идеале от людей с опытом openssl, использование этой библиотеки является необходимым условием для проекта)

1 Ответ

0 голосов
/ 10 февраля 2011

Начиная с typedef для DES_cblock:

typedef unsigned char DES_cblock[8];

Введите собственный код для комментариев и используйте что-то вроде:

DES_key_schedule ks1, ks2, ks3;
DES_cblock key_8bytes;

/* ... copy the first 64 bits of the 192 bits into key_8bytes....*/
DES_set_key_unchecked(&key_8bytes, &ks1);

/* ... copy the second 64 bits of the 192 bits into key_8bytes....*/
DES_set_key_unchecked(&key_8bytes, &ks2);

/* ... copy the final 64 bits of the 192 bits into key_8bytes....*/
DES_set_key_unchecked(&key_8bytes, &ks3);
...