Страница: 1 |
Вопрос: XXE на Visual Basic | Добавлено: 04.03.08 18:39 |
Автор вопроса: ![]() |
Вот нашёл алгоритм шифрования XXE на с++. Но в с++ я ещё пока не силён :( Может кто-нибудь сможет этот код перенести на VB? Думаю этим заинтиресуюсь не не только я :)
//////////////////////////////////САМ КОД #include "comprlib.h" /* Encode a character */ #define ENC(c) (set[(c) & 077]) /* Set of characters is used */ static char set[] = "+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; /* Output one group of 3 bytes, pointed to by 'p' */ static void outenc(char* p) { int c1, c2, c3, c4; c1 = *p >> 2; c2 = (*p << 4) & 060 | (p[1] >> 4) & 017; c3 = (p[1] << 2) & 074 | (p[2] >> 6) & 03; c4 = p[2] & 077; write_byte(ENC(c1)); write_byte(ENC(c2)); write_byte(ENC(c3)); write_byte(ENC(c4)); } /* 'fr' is like 'read' */ static int fr(char* buf, int cnt) { register int i, c; for (i = 0; i < cnt; ++i) { c = read_byte(); if (end_of_data()) return i; buf = c; } return cnt; } /* XXEncode a file */ int encode_xxe() { char buf[80]; int i, n; while (true) { /* Read a 1 to 45 character line */ n = fr(buf, 45); write_byte(ENC(n)); for (i = 0; i < n; i += 3) outenc(&buf); write_byte('\n'); if (n <= 0) break; } return 0; } #define DEC(c) (table[(c) & 0117]) static char table[128]; static int replace; static void outdec(char* p, int n) { int c1, c2, c3; c1 = DEC(*p) << 2 | DEC(p[1]) >> 4; c2 = DEC(p[1]) << 4 | DEC(p[2]) >> 2; c3 = DEC(p[2]) << 6 | DEC(p[3]); if (n >= 1) write_byte(c1); if (n >= 2) write_byte(c2); if (n >= 3) write_byte(c3); } int decode_xxe() { char buf[80]; char* bp; int n, i; bp = table; for (n = 128; n; n--) *(bp++) = 0; bp = set; for (n = 64; n; n--) table[*(bp++) & 0117] = 64 - n; while (true) { /* Read an input line */ for (i = 0; i < (signed)sizeof(buf); i++) { buf = read_byte(); if (end_of_data()) break; } n = DEC(buf[0]); if (n <= 0) break; bp = &buf[1]; while (n > 0) { if (replace) /* never initialized? */ outdec(bp, n); bp += 4; n -= 3; } } return 0; } //////////////////////////////////////////COMPRLIB.H extern int (*end_of_data)(); /* True if no more data left */ extern int (*read_byte)(); /* Read a byte from input */ extern int (*write_byte)(int byte); /* Write a byte to output */ extern int (*beginning_of_data)(); /* Move to beginning of data source */ extern int (*write_array)(void* a, int);/* Write stream of data */ extern int (*write_block)(char c, int); /* Write one byte many times */ extern long (*stream_size)(); /* Retreive length of data source */ /* All encoding/decoding method prototypes */ int fastcopy(); int slowcopy(); int encode_xxe(); int decode_xxe(); int encode_arith(); int decode_arith(); int encode_lzss(); int decode_lzss(); int encode_dmc(); int decode_dmc(); int encode_lzari(); int decode_lzari(); int encode_rle1(); int decode_rle1(); int encode_rle2(); int decode_rle2(); int encode_lzhuf(); int decode_lzhuf(); int encode_collapse(); int decode_collapse(); int encode_lzw(); int decode_lzw(); int encode_splay(); int decode_splay(); int encode_huffman(); int decode_huffman(); int encode_spread(); int decode_spread(); int encode_xor(); int decode_xor(); int encode_addsub(); int decode_addsub(); int encode_uue(); int decode_uue(); int encode_lzo(); int decode_lzo(); typedef struct PAIR { char* name; char* value; } PAIR; typedef PAIR* PPAIR; typedef struct METHOD_TO_NAME { char* name; int (*encode)(); int (*decode)(); } METHOD_TO_NAME; extern METHOD_TO_NAME methods[]; /* in comprlib.c */ /* ComprLib properties */ int comprlib_set_prop(char* tag, char* value); char* comprlib_get_prop(char* tag); |
Ответы | Всего ответов: 9 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 04.03.08 22:08 |
Это не алгоритм шифрования, а алгоритм кодирования. И он прост, как бублик. Разбиваешь входной поток на куски по 6 бит и записываешь в выходной поток символ строки +-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz с соответствующим номером. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 04.03.08 22:45 |
и файл становится на 25% длинее (из сборника собственных мыслей![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 05.03.08 09:46 |
Нифига подобного, больше чем на треть. Во-первых, из 6 битов получается 8, во-вторых, там, как правило, добавляется разбитие на строки и заголовок. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 17 Ответов: 26 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 05.03.08 15:41 |
Хе, я как-то всё-таки решил что Base64 немного удобней, вот и сделал прогу на нём ![]() |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 06.03.08 06:36 |
Они практически идентичны. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 06.03.08 17:00 |
ну видимо base64 удобней тем, что с ним был готовой код![]() |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ICQ: 295002202 Вопросов: 87 Ответов: 1684 |
Профиль | Цитата | #7 | Добавлено: 07.03.08 21:33 |
http://www.google.com/codesearch?q=lang%3Abasic+file%3AXXE&hl=ru
|
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ICQ: 308-534-060 Вопросов: 20 Ответов: 1860 |
Web-сайт: Профиль | Цитата | #8 | Добавлено: 11.03.08 09:12 |
Я писал декодирование xxe на ассемблере (и постил исходник на этом форуме). В общем, как правильно заметил Sharp, алгоритм простой, только вот один раз с переносом строк ничего не напутать. Есть реализации, которые вставляют в начале строки контрольные суммы строк, что-ли. Так поступает встроенный в Total Commander кодировщик. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 11.03.08 20:04 |
Кстати я помню тема была, о том, что картинка не декодировалась обратно. Еле догадались, что там переносы виноваты)) глупо конечно)) |
Страница: 1 |
|