Roman Pogosyan 3 Posted 2011-09-29 12:06:41 Author Share Posted 2011-09-29 12:06:41 ну тогда я вообще ничерта не пойму , вспомнил про bloc2byte посмотрел в тесте он в обратном порядке , разозлился , заменил у старгайзера порядок (ведь с тесом сошлось кодирование слова) скомпилировал старгайзер заново , сделал make uninstall для пущей точности, создал чистый пакет в 96 байт (чтоб исключить разницу в структурах C и C#) вписываю в первые 6 байтов "00100", 6-7 > 0 и 8 соответсвенно , с 9 байта вписываю логин остальные до оставляю нулевыми , кодирую байты с 8по 40-ой ... и посылаю inetaccess.cpp > 17:06:40 > User '▒}▒▒ǁ▒▒▒ad▒▒▒▒▒ad▒▒▒▒▒ad▒▒' NOT found! реальный "ад ад ад " Link to post Share on other sites
madf 279 Posted 2011-09-29 12:33:31 Share Posted 2011-09-29 12:33:31 ну тогда я вообще ничерта не пойму , вспомнил про bloc2byte посмотрел в тесте он в обратном порядке , разозлился , заменил у старгайзера порядок (ведь с тесом сошлось кодирование слова) скомпилировал старгайзер заново , сделал make uninstall для пущей точности, создал чистый пакет в 96 байт (чтоб исключить разницу в структурах C и C#) вписываю в первые 6 байтов "00100", 6-7 > 0 и 8 соответсвенно , с 9 байта вписываю логин остальные до оставляю нулевыми , кодирую байты с 8по 40-ой ... и посылаю inetaccess.cpp > 17:06:40 > User '▒}▒▒ǁ▒▒▒ad▒▒▒▒▒ad▒▒▒▒▒ad▒▒' NOT found! реальный "ад ад ад " Злость - плохой помощник Не надо ничего в Stargazer'е менять, там все правильно. А тест (по крайней мере первый) делался специально для BE-платформы. Потому и порядок там обратный. Вообще, если честно, я уже и сам не помню что там в том тесте. Я ним просто хотел продемонстрировать принцип отладки: берем шифруем последовательность на сервере, шифруем на клиенте и сравниваем. Не нужно считать тест эталоном, эталон - stargazer. Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 12:45:04 Author Share Posted 2011-09-29 12:45:04 прикол в том что у меня совпало закодированное как раз с обратным порядком как на be платформе Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 13:08:56 Author Share Posted 2011-09-29 13:08:56 взял blowgish.c старгайзера , закодировал им строку в 16 байт , закодировал своим криптером в 16 байт совпадают тем же кодирую пакет передаю по сети . User '▒▒▒▒▒da▒▒▒▒▒da▒▒▒▒▒da▒▒▒▒▒da' NOT found! Link to post Share on other sites
madf 279 Posted 2011-09-29 13:17:44 Share Posted 2011-09-29 13:17:44 Покажи как кодируешь Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 13:22:19 Author Share Posted 2011-09-29 13:22:19 private void button1_Click(object sender, EventArgs e) { string original = "1234567812345678"; byte[] encrypted; byte[] decrypted; string password = "pr7Hhen"; int length = 16; int i; BlowFish bf = new BlowFish(Encoding.UTF8.GetBytes(password)); richTextBox1.Text += String.Format("Original string: {0}", original); encrypted=bf.Encrypt_ECB(Encoding.UTF8.GetBytes(original)); string encstr=""; for (i = 0; i < 16; ++i) { encstr+=String.Format(" {0:X}", encrypted[i] & 0x000000FF); } richTextBox1.Text += "\n Encrypted " + encstr; } } Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 13:23:31 Author Share Posted 2011-09-29 13:23:31 cat test.c #include <stdint.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include "stg/blowfish.h" uint32_t n2l(const unsigned char * c) { uint32_t t = *c++ ; t += *c++ << 8; t += *c++ << 16; t += *c<<24; return t; } void l2n(uint32_t t, unsigned char * c) { *c++ = t & 0x000000FF; *c++ = t >> 8 & 0x000000FF; *c++ = t >> 16 & 0x000000FF; *c = t >> 24 & 0x000000FF; } void Encrypt(BLOWFISH_CTX * ctx, const char * src, char * dst, int length) { uint32_t a; uint32_t b; int i; for (i = 0; i < length / 8; ++i) { a = n2l(src + i * 8); b = n2l(src + i * 8 + 4); Blowfish_Encrypt(ctx, &a, &; l2n(a, dst + i * 8); l2n(b, dst + i * 8 + 4); } } void Decrypt(BLOWFISH_CTX * ctx, const char * src, char * dst, int length) { uint32_t a; uint32_t b; int i; for (i = 0; i < length / 8; ++i) { a = n2l(src + i * 8); b = n2l(src + i * 8 + 4); Blowfish_Decrypt(ctx, &a, &; l2n(a, dst + i * 8); l2n(b, dst + i * 8 + 4); } } int main() { char * original = "1234567812345678"; char * encrypted; char * decrypted; char * password = "pr7Hhen"; int length = 16; int i; BLOWFISH_CTX ctx; Blowfish_Init(&ctx, password, strlen(password)); encrypted = (char *) malloc(17); decrypted = (char *) malloc(17); *(encrypted + 16) = 0; *(decrypted + 16) = 0; // printf("Original string: '%s'\n", *original); for (i = 0; i < 16; ++i) { printf("%.2x ", *(original + i) & 0x000000FF); } Encrypt(&ctx, original, encrypted, 16); printf("Encrypted string: "); for (i = 0; i < 16; ++i) { printf("%.2x ", *(encrypted + i) & 0x000000FF); } printf("\n"); Decrypt(&ctx, encrypted, decrypted, 16); printf("Decrypted string: '%s'\n", decrypted); free(encrypted); free(decrypted); return EXIT_SUCCESS; } Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 13:25:15 Author Share Posted 2011-09-29 13:25:15 test out Encrypted string: e7 b0 9e e4 16 21 62 ca e7 b0 9e e4 16 21 62 ca Decrypted string: '1234567812345678' программа Original string: 1234567812345678 Encrypted E7 B0 9E E4 16 21 62 CA E7 B0 9E E4 16 21 62 CA Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 13:29:23 Author Share Posted 2011-09-29 13:29:23 кодирование C# отсюда http://www.schneier.com/code/blowfish.cs только / /ToUInt32 requires the bytes in reverse order закоментировал // Array.Reverse(block1); // Array.Reverse(block2); Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 13:31:37 Author Share Posted 2011-09-29 13:31:37 прикол только в том что после отсылки этого пакета старгайзер его как то не понимает Link to post Share on other sites
madf 279 Posted 2011-09-29 13:52:55 Share Posted 2011-09-29 13:52:55 Значит проблема в том как ты кодируешь блоки протокола. Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 14:32:56 Author Share Posted 2011-09-29 14:32:56 я еще не дошел до того чтоб закодировать весь протокол , я только пытаюсь закодировать первые 32 байта Link to post Share on other sites
madf 279 Posted 2011-09-29 14:45:30 Share Posted 2011-09-29 14:45:30 Первые 32 байта шифровать бессмысленно. Сперва идут 8 байт заголовка, который не шифруется. А уже за ним следует зашифрованный пароль. Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 15:00:07 Author Share Posted 2011-09-29 15:00:07 уверен что не там рою .. дабавил в inetaccess.cpp кусок кода для вывода закодированной части LoginS на логин "roman" получил вот что " 5d 4d 95 b9 10 c7 d7 c0 cd 2a 2f 49 b1 e4 0a 91 cd 2a 2f 49 b1 e4 0a 91 cd 2a 2f 49 b1 e4 0a 91" (если пользоватся стандартным авторизатором) ну да я про те 8 не говорю Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 15:02:08 Author Share Posted 2011-09-29 15:02:08 когда осылаю своим получаю 3c 0a 17 05 0e a2 b7 e0 80 b8 73 7c 1c a0 87 43 80 b8 73 7c 1c a0 87 43 80 b8 73 7c 1c a0 87 43 test тоже дает 3c 0a 17 05 0e a2 b7 e0 80 b8 73 7c 1c a0 87 43 80 b8 73 7c 1c a0 87 43 80 b8 73 7c 1c a0 87 43 Link to post Share on other sites
madf 279 Posted 2011-09-29 15:45:06 Share Posted 2011-09-29 15:45:06 Попробуй получить результат с помощью EncodeString/DecodeString - именно эти функции используются в авторизаторе и в плагине. Только обрати внимание на то что они хоть и называются *String, но шифруют только 8 байт. По этому должны использоваться примерно так: //----------------------------------------------------------------------------- inline void Decrypt(BLOWFISH_CTX * ctx, char * dst, const char * src, int len8) { for (int i = 0; i < len8; i++) DecodeString(dst + i * 8, src + i * 8, ctx); } //----------------------------------------------------------------------------- inline void Encrypt(BLOWFISH_CTX * ctx, char * dst, const char * src, int len8) { for (int i = 0; i < len8; i++) EncodeString(dst + i * 8, src + i * 8, ctx); } Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 17:32:42 Author Share Posted 2011-09-29 17:32:42 без разницы .. тут дело в другом если original из 8 байт то коды совпадают иначе рознятся это в test.c а в старгайзере при посилке того же через клиент (заводской) совсем иное Link to post Share on other sites
Roman Pogosyan 3 Posted 2011-09-29 20:31:23 Author Share Posted 2011-09-29 20:31:23 Блин .. это полный писец ... столько мучений и переделок в коде .. опухания и нервов и все из за тупо незамеченной инициализации ... а я все думал почему же у меня ctx разнится .. а оказывается что там не Blowfish_init а InitEncrypt который добавляет pr7Hhen еще много нулевых байтов ) все .. закодировал на конец Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now