|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.07.2015, 07:22 | #1 |
Пользователь
Регистрация: 14.12.2014
Сообщений: 13
|
Проблема с кодом, когда -On, n >= 1 (GCC)
Доброго времени суток.
Пишу я тут класс Blowfish. Если я его компилирую с ключом -O0, то результат шифрования блока получается один, если с ключом -O1 или -O2, то результат шифрования получается другой. При этом расшифровываются блоки корректно, а каждый запуск программы выдает один и тот же результат. Но вот если теперь попробовать ключ -O3, то при каждом запуске программы результат шифрования одного и того же блока разный, но при этом расшифровка (в этом же процессе) происходит корректно! (Это как так, вообще? ) Я уже шатал-шатал реализацию всех методов по разному, пробовал запрещать оптимизацию каждого из методов, надеясь найти тот, реализация которого косячная, но результат все тот же. Разбивал сложные выражения на мелкие, выносил куски кода в отдельные методы, - не меняется совершенно ничего. Пробовал другую версию (5.1.0 вместо 4.7.1) GCC, при этом результат шифрования немного изменялся, но общая картина та же. Воз и ныне там. Кто-нибудь может подсказать что-нибудь по этому поводу? На всякий случай нарисую здесь мой код проверки класса: Код:
|
02.07.2015, 09:07 | #2 | |
Форумчанин
Регистрация: 11.01.2013
Сообщений: 149
|
Цитата:
-On это не шифрование а оптимизация кода компилятором. При -О3 компилировать не рекомендуется, правда если скомпилировалось и корректно работает то там оптимизация очень хорошая, но это редкость когда так получается.
Может это и чушь, но это моя чушь и я ее никому не отдам.
|
|
02.07.2015, 09:37 | #3 |
Пользователь
Регистрация: 14.12.2014
Сообщений: 13
|
Простите, наверное я не ясно выразился. На самом деле я не называл оптимизацию шифрованием. Все, что я говорю о шифровании блоков, относится к алгоритму Blowfish. Алгоритм реализован в представленном классе, а блоки размером 64 бита с помощью этого класса зашифровывает и расшифровывает функция main() программы. Так вот саму программу (все ее *.cpp файлы) я компилирую с параметром (я случайно назвал его ключом) -On.
|
02.07.2015, 09:43 | #4 |
Пользователь
Регистрация: 14.12.2014
Сообщений: 13
|
Вообще, подозрения, конечно изначально падали на SetCipherKey(), уж очень она криворукая. Взял сейчас реализацию этой функции (и немного переделал) у Paul Kocher:
Код:
Последний раз редактировалось Sushev; 02.07.2015 в 10:21. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
GCC, проблема с прогой | shamaz | Общие вопросы C/C++ | 7 | 12.09.2013 21:19 |
проблема с кодом | net_probelam | Общие вопросы C/C++ | 1 | 19.10.2011 02:06 |
Проблема с компиляцией матфункций в gcc | Svent | Qt и кроссплатформенное программирование С/С++ | 4 | 09.07.2010 12:44 |
Проблема с функцией pow в С, использую GCC | maryan.vetrov | Помощь студентам | 0 | 07.06.2010 04:12 |
проблема с gcc | d9m0n | Qt и кроссплатформенное программирование С/С++ | 6 | 04.09.2009 02:30 |