Roman Pogosyan 3 Опубліковано: 2011-09-27 13:25:08 Автор Share Опубліковано: 2011-09-27 13:25:08 инициализация public Blowfish(byte[] key) { short i; short j; short k; uint data; uint datal; uint datar; P = _P.Clone() as uint[]; S = _S.Clone() as uint[,]; j = 0; for (i = 0; i < N + 2; ++i) { data = 0x00000000; for (k = 0; k < 4; ++k) { data = (data << 8) | key[j]; j++; if (j >= key.Length) { j = 0; } } P[i] = P[i] ^ data; } datal = 0x00000000; datar = 0x00000000; for (i = 0; i < N + 2; i += 2) { Encipher(ref datal, ref datar); P[i] = datal; P[i + 1] = datar; } for (i = 0; i < 4; ++i) { for (j = 0; j < 256; j += 2) { Encipher(ref datal, ref datar); S[i, j] = datal; S[i, j + 1] = datar; } } } Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-27 13:26:47 Автор Share Опубліковано: 2011-09-27 13:26:47 криптер public void Encipher(ref uint xl, ref uint xr) { uint Xl; uint Xr; uint temp; short i; Xl = xl; Xr = xr; for (i = 0; i < N; ++i) { Xl = Xl ^ P[i]; Xr = F(Xl) ^ Xr; temp = Xl; Xl = Xr; Xr = temp; } temp = Xl; Xl = Xr; Xr = temp; Xr = Xr ^ P[N]; Xl = Xl ^ P[N + 1]; xl = Xl; xr = Xr; } Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-27 13:28:41 Автор Share Опубліковано: 2011-09-27 13:28:41 ну и F private uint F(uint x) { ushort a; ushort b; ushort c; ushort d; uint y; d = (ushort)(x & 0x00FF); x >>= 8; c = (ushort)(x & 0x00FF); x >>= 8; b = (ushort)(x & 0x00FF); x >>= 8; a = (ushort)(x & 0x00FF); //y = ((S[0][a] + S[1][b]) ^ S[2][c]) + S[3][d]; y = S[0, a] + S[1, b]; y = y ^ S[2, c]; y = y + S[3, d]; return y; } обложатся вроде негде Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-09-27 19:50:19 Share Опубліковано: 2011-09-27 19:50:19 нет в C# при перекодировке стринга в байт выходит 7 байтов которые используются тут for (i = 0; i < N + 2; ++i) { data = 0x00000000; for (k = 0; k < 4; ++k) { data = (data << 8) | key[j]; j++; if (j >= key.Length) { j = 0; } } P[i] = P[i] ^ data; } Уже вижу в коде ошибку. Куда делася ORIG_P? Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-09-27 19:51:49 Share Опубліковано: 2011-09-27 19:51:49 инициализация public Blowfish(byte[] key) { short i; short j; short k; uint data; uint datal; uint datar; P = _P.Clone() as uint[]; S = _S.Clone() as uint[,]; j = 0; for (i = 0; i < N + 2; ++i) { data = 0x00000000; for (k = 0; k < 4; ++k) { data = (data << 8) | key[j]; j++; if (j >= key.Length) { j = 0; } } P[i] = P[i] ^ data; } datal = 0x00000000; datar = 0x00000000; for (i = 0; i < N + 2; i += 2) { Encipher(ref datal, ref datar); P[i] = datal; P[i + 1] = datar; } for (i = 0; i < 4; ++i) { for (j = 0; j < 256; j += 2) { Encipher(ref datal, ref datar); S[i, j] = datal; S[i, j + 1] = datar; } } } Где инициализация S? Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-28 06:26:27 Автор Share Опубліковано: 2011-09-28 06:26:27 последние 2 фора Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-28 06:28:16 Автор Share Опубліковано: 2011-09-28 06:28:16 P = _P.Clone() as uint[]; S = _S.Clone() as uint[,]; копируют статик массивы у _P и _S старгайзера они как ORIG_P ORIG_S Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-28 10:52:11 Автор Share Опубліковано: 2011-09-28 10:52:11 для компилирования в C используется библиотека ssl ? у меня она не ипользовалась , может из за этого разница в ctx ? Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-28 16:07:30 Автор Share Опубліковано: 2011-09-28 16:07:30 nashel sait s onlajn cryptovaniem blowfish .. proveril .. real'no xren ego znaet chto kriptovala proshlaya realizaciya ... nashel eshe odin , zapustil encrypt_CBC (pravda v e etom algritme eshe IV est' (krome key-a)) vpisal v IV (init vector) nuli , vzyal string , perevel ego v bajt , zakodiroval bajt , perevel v hex dex (na etom sajte rezul'tat vydavalo v dec hex) .. sravnil rezul'taty .. odinakovye => 100% rabochaya realizaciya vzyal iz vpisal v nego crypt_stg tak kak tam pravyj i levyj bajt poluchaetsya inache chem u obyknovennogo algoritma ... zakrpittoval paket i opyat' inetaccess.cpp > 21:07:23 > User 'ъo|д╘j,Ґ╣Ї5ъ▀р╣Ї5ъ▀р╣Ї5ъ▀р' NOT found! ... mozgi kipyat i trebuyut pravosudiya Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-09-28 16:34:01 Share Опубліковано: 2011-09-28 16:34:01 Посмотри вот это: http://local.com.ua/forum/topic/14275-%D0%BD%D0%B5-%D0%BF%D1%80%D0%BE%D1%85%D0%BE%D0%B4%D0%B8%D1%82-%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/ Там я решал проблемы с шифрованием на системах с разным порядком байт. Там есть тестовые программки - они помогут. Основная идея - отследить порядок инициализации контекста и шифрования и найти где они начинают различаться. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-09-28 16:36:05 Share Опубліковано: 2011-09-28 16:36:05 для компилирования в C используется библиотека ssl ? у меня она не ипользовалась , может из за этого разница в ctx ? Не используется. К сожалению. В OpenSSL универсальная и переносимая реализация. Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-29 07:38:23 Автор Share Опубліковано: 2011-09-29 07:38:23 проверил , у меня нет разницы в эдиан. и на компе где компилирую прогу и на сервере Litlle Edian Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-09-29 07:55:10 Share Опубліковано: 2011-09-29 07:55:10 Я в этом и не сомневался. Просто утилиты которые я тогда выкладывал могут помочь в диагностировании проблемы. Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-29 07:58:50 Автор Share Опубліковано: 2011-09-29 07:58:50 там текстовые файлы с кракозябрами внутри Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-09-29 08:30:43 Share Опубліковано: 2011-09-29 08:30:43 там текстовые файлы с кракозябрами внутри А почитать внимательно что я там писал? Во вложении файл crypt.txt. Скачать, переименовать в crypt.tar.bz2 (не смог загрузить так), распаковать. ... Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-29 08:52:08 Автор Share Опубліковано: 2011-09-29 08:52:08 перевел test.cpp na C# библиотека криптования последняя результат 5D 33 E1 FE 85 17 3F 7A A2 B8 EF D4 6F 2B 72 1C а должен был быть Encrypted string: 5d 33 e1 fe 85 17 3f 7a 3e 91 24 35 3e da 56 38 , то есть разница во втором байте вышла Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-29 09:02:04 Автор Share Опубліковано: 2011-09-29 09:02:04 с алгоритмом ECB Encrypted 5D 33 E1 FE 85 17 3F 7A 3E 91 24 35 3E DA 56 38 Все правильно , сейчас закодирую пакет глянем Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-29 09:18:19 Автор Share Опубліковано: 2011-09-29 09:18:19 блин inetaccess.cpp > 14:17:32 > User '▒N▒$▒▒▒▒▒O▒▒▒▒▒▒O▒▒▒▒▒▒O▒▒▒' NOT found! значит изначально дело было не в криптованиии Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-29 09:21:04 Автор Share Опубліковано: 2011-09-29 09:21:04 хотя есть еще момент в ключе для инициализации там 7 байт а не 8 как в тесте Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-09-29 09:40:12 Share Опубліковано: 2011-09-29 09:40:12 хотя есть еще момент в ключе для инициализации там 7 байт а не 8 как в тесте Тест - дело такое. Там все что угодно может быть. Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-29 10:29:22 Автор Share Опубліковано: 2011-09-29 10:29:22 прикол на приколе , в тесте поставил ключ из стг сравнил закодированное , все точно , разозлился собрал свой UDP сервер , взял клиент Inetaccess с сайта , послал с него инфо на подключение ... так же разкодировать не выходит ... попытался поискать в дате полученной от клиента закодированный логин (думал может сдвинут куда то ) ... ни одного совпадения блока не нашел . так что все намного интереснее Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-29 11:01:38 Автор Share Опубліковано: 2011-09-29 11:01:38 вопрос byte2block там идет выражение *c++ каким элементом он является в const char *c ? нулевым или первым ? Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-09-29 11:11:28 Автор Share Опубліковано: 2011-09-29 11:11:28 наткнулся кажется на то в чем дело ... и так вопрос в тесте original содержит 16 символов, если скормить ему меньше к примеру 8, чем забьются остальные ? Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-09-29 11:41:49 Share Опубліковано: 2011-09-29 11:41:49 вопрос byte2block там идет выражение *c++ каким элементом он является в const char *c ? нулевым или первым ? Постинкремент возвращает старое значение переменной. Значит нулевым. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-09-29 11:43:11 Share Опубліковано: 2011-09-29 11:43:11 наткнулся кажется на то в чем дело ... и так вопрос в тесте original содержит 16 символов, если скормить ему меньше к примеру 8, чем забьются остальные ? Ну минимальный же блок для шифрования 8 байт. 16 я уже не помню для чего сделал. Может и просто так. Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас