Сделал проект в MSVC2010 — обычный dialog box application, в него добавил код ниже. Если компилирую в UNICODE, то в ф-ции DoIt() в переменной rc4Key получаю один результат, если в MBCS — другой. Почему?
Здравствуйте, sushko, Вы писали:
S>Сделал проект в MSVC2010 — обычный dialog box application, в него добавил код ниже. Если компилирую в UNICODE, то в ф-ции DoIt() в переменной rc4Key получаю один результат, если в MBCS — другой. Почему?
как btKey инициализируется?
Re[2]: один и тот же код работает по-разному в UNICODE и в неUNICODE
Здравствуйте, night beast, Вы писали:
S>>Сделал проект в MSVC2010 — обычный dialog box application, в него добавил код ниже. Если компилирую в UNICODE, то в ф-ции DoIt() в переменной rc4Key получаю один результат, если в MBCS — другой. Почему?
NB>как btKey инициализируется?
Здравствуйте, CaptainFlint, Вы писали:
CF>Здравствуйте, sushko, Вы писали:
CF>Выход за пределы массива. btKey длиной 8, а index1 идёт до 15-ти.
Блин! Точно. Нарастил btKey — получил один и тот же результат в Unicode и MBCS. Исходный код без сбоев работал у меня в разных проектах лет пятнадцать Теперь надо как-то сообразить сделать исправленный код совместимым со старыми багами
Здравствуйте, sushko, Вы писали:
CF>>Выход за пределы массива. btKey длиной 8, а index1 идёт до 15-ти.
S>Блин! Точно. Нарастил btKey — получил один и тот же результат в Unicode и MBCS. Исходный код без сбоев работал у меня в разных проектах лет пятнадцать Теперь надо как-то сообразить сделать исправленный код совместимым со старыми багами
Ну, тут изначально возникают вопросы: а) почему для 8-байтного массива передана длина 16, и б) почему константой, а не sizeof'ом.
Самое очевидное — попробовать указать всё же правильную длину: prepare_key(btKey, 8, &rc4Key), но тут надо разбираться, что конкретно делает алгоритм и как он реагирует на разные входные данные. Я сходу не понял, что это за числодробилка, а ковырять — времени нет.
Если 8 не делает не то, что надо, то выходит, что раньше программа полагалась на наличие некоего мусора за пределами массива — можно попытаться выяснить, что там за мусор, и продублировать его, добив массив до тех же 16-ти байт, что использовались ранее, но теперь уже "легально".
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[6]: один и тот же код работает по-разному в UNICODE и в неUNICODE
Здравствуйте, CaptainFlint, Вы писали:
CF>Ну, тут изначально возникают вопросы: а) почему для 8-байтного массива передана длина 16, и б) почему константой, а не sizeof'ом.
"Нет повести печальнее на свете". Понадобилось добавить в программу шифрование RC4, разбираться в алгоритме, естественно, времени не было, скачал какой-то исходник с CodeGuru, попробовал — работает. Так и таскал его за собой 15 лет из проекта в проект
CF>Если 8 не делает не то, что надо, то выходит, что раньше программа полагалась на наличие некоего мусора за пределами массива — можно попытаться выяснить, что там за мусор, и продублировать его, добив массив до тех же 16-ти байт, что использовались ранее, но теперь уже "легально".
Нулями там все забивалось. Уже выложил исправленную версию программы на сайт