Я использю 64 бита в качестве фидбэка. Это не CFB-64?06.05.11 21:45 Число просмотров: 6943 Автор: developertmp Статус: Незарегистрированный пользователь
//BYTE _data[29] = "7654321 Now is the time for "; // (includes trailing '\0')
BYTE _data[32] = {0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x20,0x4E,0x6F,0x77,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x74,0x69,0x6D,0x65,0x20,0x66,0x6F,0x72,0x20,0x00,0x00,0x00,0x00};
что не соответствует приведенному на сайте вектору:
cfb64 cipher text cipher[29]=
E73214A2822139CAF26ECF6D2EB9E76E3DA3DE04D1517200519D57A6C3
очевидно, что ты используешь иной алгоритм. ты, не попутал blowfish-cfb и blowfish-cfb64? Где исходник алгортима? По ссылке лишь результат. А такие циферки я могу и из /dev/urandom выдернуть.06.05.11 20:41 Автор: kstati <Евгений Борисов> Статус: Elderman Отредактировано 06.05.11 20:43 Количество правок: 1
//BYTE _data[29] = "7654321 Now is the time for "; // (includes trailing '\0')
BYTE _data[32] = {0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x20,0x4E,0x6F,0x77,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x74,0x69,0x6D,0x65,0x20,0x66,0x6F,0x72,0x20,0x00,0x00,0x00,0x00};
порядок байтов, s, p таблицы те же? это твой код, или код из примера?06.05.11 22:29 Автор: kstati <Евгений Борисов> Статус: Elderman Отредактировано 06.05.11 22:29 Количество правок: 1
Шифрование блока (Blowfish_Init(), Blowfish_Encrypt()) - известная имплементация by Paul Kocher, взятая с сайта www.schneier.com/blowfish-download.html.
Там всё проверено и тестировано (т.е. с таблицами не может быть проблем). Всё остальное (несколько строк кода выше в начале нитки) моё. Тестовый вектор, который я указывал - Эрика Янга.
Сейчас нет под рукой компилятора проверить, но на вскидку вариант Эрика отличается от Паулевского06.05.11 23:34 Автор: kstati <Евгений Борисов> Статус: Elderman Отредактировано 06.05.11 23:44 Количество правок: 3
static unsigned long F(BLOWFISH_CTX *ctx, unsigned long x) {
unsigned short a, b, c, d;
unsigned long y;
d = (unsigned short)(x & 0xFF);
x >>= 8;
c = (unsigned short)(x & 0xFF);
x >>= 8;
b = (unsigned short)(x & 0xFF);
x >>= 8;
a = (unsigned short)(x & 0xFF);
y = ctx->S[0][a] + ctx->S[1][b];
y = y ^ ctx->S[2][c];
y = y + ctx->S[3][d];
return y;
}
---
Особое внимание обрати на сдвиги. побайтно и... 22,14,6,-2 бита. Это похожие, но по сути разные алгоритмы.
Поэтому-то я и повторяю — уточни каким именно алгоритмом получено значение, которого ты пытаешься добиться.
Хотя может я и загнался.
таки не учёл порядок байтов. на ibm-ках последовательность байт 0x12,0x34,0x56,0x78 определяет двойное слово 0x7856342111.05.11 02:39 Автор: kstati <Евгений Борисов> Статус: Elderman
Согласен. При выполение ULONG val = reinterpet_cast<ULONGgt;(byte_array)) (как было в неправильном коде) порядок байт будет обратный тому, что есть в массиве byte_array на little-endin хосте.