![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Демидрол |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 7.6.2008 Где: СПб Репутация: нет Всего: нет |
Доброе время суток,уважаемые программисты.У меня возникли сложности с реализацией алгоритма шифрования rc5 и поэтому я хочу попросить Вас помочь мне решить сию проблему.
Алгоритм по заданию выглядит следующим образом: 1.Установить счетчик и число раундов шифрования R и выполнить преобразование: A:=(A+Q0) mod 2b; B:=(B+Q1) mod 2b; 2.Преобразовать: A:={[(A (сумма по модулю 2) B)<<<B]+Q2i} mod 2b; B:={[(B (сумма по модулю 2) A)<<<A]+Q2i+1} mod 2b; 3.Если i != R, то прирастить i=i+1 и перейти к шагу 2. 4.Стоп. 5.Преобразованное значение подблоков A и В. В приведенном алгоритме b - это длина подблоков в битах, R - число раундов шифрования, (сумма по модулю 2) - сложение по модулю 2, <<< - циклический сдвиг влево на количество бит, указанное справа, Qi - значение b - битного подключа. Типичной является модификация алгоритма с параметрами b=32, R=12, К=128 бит, где К - это значение секретного ключа из которого формируются подключи Qi. Дешифрование выполняется в обратной последовательности и вместо сложения по модулю 2b используется вычитание, а вместо циклического сдвига влево - циклический сдвиг вправо. То есть, приходят данные, например char *Text. Далее мы разбиваем эти данные на подблоки по 32 бита, приходит char *Key, размером 128 бит и разбивается на подключи. Нужно написать функции char* Kodirovanie (char *Text, char *Key) и char* DeKodirovanie (char *Text, char *Key), которые бы возвращали зашифрованный и дешифрованный текст соответственно. Заранее благодарю всех,кто решит мне помочь. В сети нашел вот такой код:
вот только не пойму,как приспособить это под свои нужды. Как нужно в этом коде подправить что-нить,чтобы я вводил текст, ключ и передавал их в функции в виде char *Text и char *Key, для декодирования аналогично. Помогите,пожалуйста разобраться!!! мммм...просто лес рук желающих помочь...Пожалуйста,завтра уже наступит скоро и сдавать надо че-нить,а я не очень понимаю как все сделать...Помогите,пожалуйста,очень надо! Это сообщение отредактировал(а) Демидрол - 9.11.2008, 17:54 |
|||
|
||||
| Демидрол |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 7.6.2008 Где: СПб Репутация: нет Всего: нет |
Вот,нашел почти то, что нужно, только я на Билдере пишу и он не знает типа CString
Горю!!!Плз, помогите перевести на доступный Билдеру язык:
Очень-очень надо,только не знаю как.Помогите,пожалуйста!!!!! |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 16 Всего: 128 |
Демидрол, насколько мне помнится, CString - это класс строк в Visual C++, в билдере свой класс - AnsiString. Но там, соответственно, и функции не такие. Придется малость подработать код, но факт есть факт - CString везде заменяй на AnsiString. Это как минимум.
|
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 16 Всего: 306 |
Демидрол, на самом деле к Борману (шестой версии) можно подцепить классы MFC. Кто не верит - смотрим Example
Ходя действительно вполне можно заменить строковые типы с CString на AnsiString. Проблем быть не должно |
|||
|
||||
| Демидрол |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 7.6.2008 Где: СПб Репутация: нет Всего: нет |
Проблемы есть с функцияей GetBuffer().
как можно её заменить? Нашел про неё немного информации, но как заменить её ума не приложу... Это сообщение отредактировал(а) Демидрол - 13.11.2008, 19:28 |
|||
|
||||
| Демидрол |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 7.6.2008 Где: СПб Репутация: нет Всего: нет |
Ну, справился я с этой проблемой, заменив GetBuffer() на c_str(). Не знаю, правильно ли это с точки зрения теории, но радует то, что работает так, как должно работать.
Все, тему закрываю, спасибо всем, кто принял в её обсуждении участие, напоследок хочется спросить не в тему, но я вот озадачился: Допустим, я пишу:
А как место высвобождать в конце? Так:
или так:
Я поймал себя на мысли, что туплю и вопрос глупый, но как надо на самом деле делать? |
||||||
|
|||||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 16 Всего: 128 |
Первое, delete [] Array. В случае со скобками освободится вся область памяти, занятая массивом, а если написать без скобок, то освободится только память, занятая первым элементом массива, остальные останутся лежать, как лежали.
|
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |