Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Visual FoxPro] Scrambler


Автор: collateral 5.5.2011, 14:46
Вот есть код скрэмблера на 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


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)