Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Visual FoxPro] Scrambler, Есть почти готовое решение но есть косяк 
:(
    Опции темы
collateral
Дата 5.5.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 5.5.2011

Репутация: нет
Всего: нет



Вот есть код скрэмблера на VFP. Ключ и скрэмблер по-идее должны быть введены в двоичной системе. Разрядность - 1 байт. Скрэмблер работает по алгоритму xor. Но косяк в участке кода строки 14-21, так как в самой схеме скрэмблирования я еще не совсем разобрался, прошу вашей помощи - как оно должно быть на самом деле. Заскрэмблированные им самим файлы он отлично расшифровывает, а заскрэмблированные другим скрэмблером - нет.
Код

nf=FOPEN('neshifr.jpg')&& открываем файл
newf=FCREATE('shifr.jpg')&& создаем файл

input 'Vvedite scrambler = ' to scr
input 'Vvedite kluch =  ' to key_

FSEEK(nf, 0) && перемещаем указатель в начало файла

DO WHILE NOT FEOF(nf) && делаем до конца файла
qqq=FREAD(nf,1) && считываем 1 байт из файла
sim=ASC(qqq) && получаем ANSI код считанного
kod=0 && устанавливаем начальные значения
s=0
FOR i=7 TO 0 STEP -1 && формируем кодирующий байт из 8 битов
FOR j=0 TO 7 && перебираем скрэмблер и ключ
        IF BITTEST(scr, j) && если житый бит скрэмблера =1
            IF BITTEST(key_, j) && и если житый бит ключа =1
                    s=xor(s, 1)        
            ELSE 
                    s=xor(s, 0)
            ENDIF   
        ENDIF
ENDFOR
    
IF BITTEST(key_, 0)
    kod=BITset(kod, i)&& устанавливаем единицу
ELSE
    kod=BITclear(kod, i) && устанавливаем ноль
ENDIF   
    
key_=BITRSHIFT(key_,1) && смещаем значение ключа вправо на 1 бит
        
IF s=0 && дописывем значение ключа для зацикливания процесса
        key_=BITCLEAR(key_, 7) 
    ELSE
        key_=BITset(key_, 7)
    ENDIF 
ENDFOR

itog=BITXOR(sim, kod) && получаем выходной поток

FWRITE(newf, CHR(itog)) && пишем выходной поток в файл

ENDDO 

?'Operaciya zavershena.'

FCLOSE(nf) && закрываем файлы
FCLOSE(newf)

FUNCTION xor
LPARAMETERS x, y
IF x=y 
return 0
ELSE 
RETURN 1



Это сообщение отредактировал(а) collateral - 5.5.2011, 14:48
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0363 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.