Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2013, 02:40   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Не так работает скремблер

Здравствуйте, ниже выкладываю код для скремблирования, этот код выполняется почти так, но постоянно в каком-нибудь одном из битов просчитывается и выводит не то что нужно, вот формула по которой надо все решать(сохранена в word-документе во вложении(весь документ на чуть больше половины страницы)).


А вот сам код

Код:
var
  i,k,ki:integer;
  s,si:string;
  Form1: TForm1;


procedure TForm1.Button1Click(Sender: TObject);
begin
s:='';
si:='';
k:=0;
ki:=0;
Memo1.clear;
 Edit1.Text:=Trim(Edit1.text);
   for i:=1 to Length(Edit1.Text) do
   begin
     if i<=3 then
     begin
      s:=s+edit1.Text[i];
      Memo1.Lines.Add('B'+IntToStr(i)+'= '+edit1.Text[i]);
      end else
     if i<=5 then
     begin
     Inc(k);
     if (Edit1.Text[k]='1') and (Edit1.Text[i]='1') or  (Edit1.Text[k]='0') and (Edit1.Text[i]='0') then si:='0' else
     if (Edit1.Text[k]='0') and (Edit1.Text[i]='1') or  (Edit1.Text[k]='1') and (Edit1.Text[i]='0') then si:='1';
     Memo1.Lines.Add('B'+IntToStr(i)+'= '+Edit1.Text[i]+' xor '+Edit1.Text[k]+'='+si);
     end
     else
     begin
     Inc(ki);
       Inc(k);
      if (Edit1.Text[k]='1') and (Edit1.Text[i]='1') or  (Edit1.Text[k]='0') and (Edit1.Text[i]='0') then si:='0' else
     if (Edit1.Text[k]='0') and (Edit1.Text[i]='1') or  (Edit1.Text[k]='1') and (Edit1.Text[i]='0') then si:='1';
     if (si='1') and (edit1.Text[ki]='1') or  (si='0') and (edit1.Text[ki]='0') then si:='0' else
     if (si='1') and (edit1.Text[ki]='0') or  (si='0') and (edit1.Text[ki]='1') then si:='1';
     Memo1.Lines.Add('B'+IntToStr(i)+'= '+Edit1.Text[i]+' xor '+Edit1.Text[k]+' xor '+Edit1.Text[ki]+'='+si);  
     end;
     s:=s+si;
   end;
Memo1.Lines.Add('--------------------------------------------------------------------------------');
Memo1.Lines.Add('Cкремблированный код: '+s);
end;
Вложения
Тип файла: doc Скремблирование.doc (35.0 Кб, 43 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 01.04.2013 в 02:49.
Алексей_2012 вне форума Ответить с цитированием
Старый 01.04.2013, 19:44   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

ну дак что, будут какие-нибудь советы? Дескремблер рабочий, а скремблер проблемный какой-то
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 02.04.2013, 09:07   #3
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

и что именно не работает
bulldog5293 вне форума Ответить с цитированием
Старый 02.04.2013, 18:22   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

ну дескремблирование работает так: вводим к примеру 10010110, а выводится 10000000, а если в скремблер ввести 10000000 то выводится 10010100 один бит ошибочный почему-то(
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 03.04.2013, 00:14   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ладно, вот мои проекты, стоит отметить что дескремблер работает верно, а скремблер упускает бит, сами проверьте, введите в программу дескремблера 10010110 и получите 10000000, а если в скремблер ввести 10000000, то должно получится 10010110, а получается 10010100, так что тут что-то непонятное, поставьте правильно алгоритм, Очень Надо!)
Вложения
Тип файла: rar Проекты (скремблер и дескремблер).rar (334.0 Кб, 55 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 03.04.2013, 09:51   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

то, что Вы выложили исходники проекта - это правильно. (шансы получить конкретную помощь резко возрастают в этом случае).

но, прежде чем их открыть, хотелось бы услышать Ваше мнение, а каков алгоритм преобразования? Как осуществляется скремблирование и дескремблирование?

вот, например, согласно вики Скремблер - это
Цитата:
Скремблирование — это обратимое преобразование цифрового потока без изменения скорости передачи с целью получения свойств случайной последовательности. После скремблирования появление «1» и «0» в выходной последовательности равновероятны. Скремблирование — обратимый процесс, то есть исходное сообщение можно восстановить, применив обратный алгоритм.

Принцип работы

Генерируется псевдослучайная последовательность (одинаковая для скремблера и дескремблера) бит. Вновь поступающий в скремблер бит суммируется по модулю два с битом псевдослучайной последовательности. После чего бит отправляется на выход, скремблер берет следующий входной бит псевдослучайной и входной последовательности и повторяет операцию. Таким образом, в простейшем случае скремблер может быть собран на двух тактируемых регистрах сдвига с обратными связями и 2-х входового элемента «исключающее или». Обратное преобразование осуществляется в обратном порядке. Псевдослучайная последовательность используется циклически. Скремблирование применяется во многих современных системах цифровой связи
Вы именно такое пытались реализовать?
и что, ключ скремблирования у Вас каждый раз один и тот же?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.04.2013, 23:03   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

а тут без ключа, нужно делать по алгоритму препода, т.е задана формула (привожу в пример формулу дескремблирования) такого вида:

с[i]=b[i]+b[i-3]+b[i-5], где i-номер позиции, начиная с начала строки с 1 позиции, первые три символа переписываются, т.к 1-3=-2, 2-3=-1, 3-3=0, а этих номеров нет, а далее 4-3=1...ладно, сейчас объясню как работает дескремблер на таком примере:

1 2 3 4 5 6 7 8-номер позиции
1 0 0 1 0 1 1 0-само число (рассматриваем как одномерный массив бинарного числа)

1) переписываем первые 3 символа (1 0 0)
2) к элементу в позиции 4 (к двоичной 1) прибавим число стоящее в позиции 4-3, т.е тоже 1, в итоге складываем то что получилос (1+1) по модулю 2, то есть так(1+1=0)
3) далее смотрим число в позиции 5, складываем его с позицией 5-3=2, т.е 0+0=0
4) смотрим число в позиции 6(там 1), складываем с позицией 6-3, т.е с элементом в третей позиции т.е с 0, и так как в формулу i-5 значение позиции можно подставить, то еще и складываем с числом стоящем в первый позиции, т.е с 1, итого имеем: 1+0+1=1+0=1+1=0
5) ну и тд до конца, то есть к 7-му элементу прибавляем 7-3=4 -ый элемент и 7-5=2 элемент то есть 0+1+1=0
6) к 8 прибавим 5-ый и прибавим третий символы, т.е 0+0+0=0

Затем окончательные ответы просто перепишем: 10000000

эта формула переводит скремблированное двоичное число в обычное методом дескремблирования, т.е принцип дешифратора, эта формула рабочая, а другая (заданная в первом посте) отказывается работать правильно, один бит не скремблерит
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 12.04.2013, 00:12   #8
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Кто-нибудь поможет? все никак не могу сделать
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 21.04.2013, 15:24   #9
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

вот пример скремблирования и дескремблирования во вложении
Изображения
Тип файла: jpg скремблирование и дескремблирование.jpg (129.2 Кб, 136 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 21.04.2013, 23:22   #10
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

люди, уже и код выложил и формулу показал, у самого ничего не выходит, помогите, пожалуйста
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скремблер GIZ Помощь студентам 2 26.04.2012 18:38
Почему так работает? Hall Общие вопросы C/C++ 15 26.01.2012 00:02
че такое скремблер Kukurudza Общие вопросы C/C++ 1 06.09.2011 13:49
LookupField работает да не так BooZzz_hs БД в Delphi 0 20.05.2010 17:38
не работает, что-то не так. Анжелика Помощь студентам 2 06.12.2008 21:47