Вот есть код скрэмблера на 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
|
|