Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм перемешивания байтов, в массиве... 
:(
    Опции темы
Monty
  Дата 24.5.2003, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

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



при этом если его еще раз выполнить, все должно вернуться как было. Мне нужно это cделать на дельфи.
Есть кусок кода, но он неправильно работает, т.е. нет обратного хода smile.gif
Код
       for i:=0 to 65535 begin
         J := (J + RandBuffer[I]) mod 65536;
         T := Buffer[I];
         Buffer[I] := Buffer[J];
         Buffer[J] := T;
       end;

RandBuffer - это массив случайных чисел
Buffer - это массив байтов, которые надо перемешать

все хорошо, да только если его еще раз повторить, то мы не вернемся к прежнему состоянию sad.gif

мне сгодится любая инфа, исходники, лишь бы работало
этот алгоритм могу сменить на другой, работающий smile.gif

Это сообщение отредактировал(а) Monty - 25.5.2003, 22:50


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
Unregistered
Дата 25.5.2003, 11:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Приветствую!
А что это такое:

Код

        T := Buffer[1][I];
        Buffer[I] := Buffer[J];

  Вверх
neutrino
Дата 25.5.2003, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Это был я. Извинияюсь.
Я имею в виду: какой размерности массив?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Monty
  Дата 25.5.2003, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

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



Цитата
Я имею в виду: какой размерности массив?
Оба массива по рамеру одинаковы, размер 65536 байт


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
Monty
  Дата 25.5.2003, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

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



Цитата(Unregistered @ 25.5.2003, 11:36)
Приветствую!
А что это такое:

Код

        T := Buffer[1][I];
        Buffer[I] := Buffer[J];

Это моя опечатка smile.gif, все, вроде правильно теперь.

Код
         T := Buffer[I];
         Buffer[I] := Buffer[J];
         Buffer[J] := T;
эту часть я не знаю как оптимизировать, она меняет местами байты,
т.е. что то наподобия ассемблерной команды XCHG smile.gif


Это сообщение отредактировал(а) Monty - 25.5.2003, 23:00


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
Unregistered
Дата 26.5.2003, 10:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Команда XCHG не менияет местами два значения в памяти.

Вопрос: а массив случайных чисел у тебя известен при обратной кодировке?
  Вверх
Master
Дата 26.5.2003, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia

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



А я на Qbasic'е в школьные годы написал программы, которая берет файл, переворачивает 255' ой символ в 0'ой, потом переворачивает 127'ой в 0'ой а 255'ый в 128'ой и потом ещё раз только с 63'им, и так мазаются все символы, кодирует файлы, потом прогоняеш еще раз и все востонавливается smile.gif


--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
neutrino
Дата 26.5.2003, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



А почему бы в таком случае не сделать просто:

A[i]=not A[i];

И все. Потом прогоняем второй раз и все встает на свои места.
Можно еще так:

xor si, si
mov cx, n
next:
mov al, a[si]
ror al, 1
mov a[si], al
loop next



--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Chingachguk
Дата 26.5.2003, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

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



Цитата
xor si, si
mov cx, n
next:
mov al, a[si]
ror al, 1
mov a[si], al
loop next


Если имеется в виду циклический сдвиг нулевого элемента массива, то можно и так:

Цитата

mov cx,n ; Или movzx cx,byte ptr n
ror byte ptr a,cl


А если имеется в виду сдвиг n первых элементов массива, то:

Цитата

mov si, offset a
mov cx, n
next:
  ror  byte ptr [si],1
  inc  si
  loop next



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Chingachguk
Дата 26.5.2003, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

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



Цитата
CODE
        T := Buffer[I];
        Buffer[I] := Buffer[J];
        Buffer[J] := T;
эту часть я не знаю как оптимизировать, она меняет местами байты,
т.е. что то наподобия ассемблерной команды XCHG


Ассемблерный код будет гораздо компактнее и быстрее, Но ! - не всегда:

Допустим, используем стандартную технику(32-х битный код):

Цитата

; Инициализация базы (быстрее, чем mov Buffer[Индекс])
mov  ecx,offset Buffer
; Инициализация I & J
mov  esi,Start_I_Value
mov  edi,Start_J_Value
; Что-то еще
...
; Обмен внутри буфера:
mov  eax,[ecx+esi] ; eax=Buffer[I]
xchg [ecx+edi],eax ; Buffer[j]=Buffer[i], eax=Buffer[j]
mov  [ecx+esi],eax ; Buffer[i]=Buffer[j]


Но временные замеры покажут, что на процессорах Pentium команда xchg будет дико тормозить (проигрыш 2-3 раза) и нужно ее бить на части (а-ля риск-процессор).


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Monty
  Дата 26.5.2003, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

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



Цитата
Вопрос: а массив случайных чисел у тебя известен при обратной кодировке?
Он востанавливается по ключу, если он правильный (кот. был при перемешивании) то ДА.

Спасибо Chingachguk будем оптимизировать smile.gif, а то и без этого программа медленно работает.

Хочется обьяснить... тот кусок кода который я привел меняет местами байты (перемешивает), они уже зашифрованы biggrin.gif и для большей уверености (и солидности), надо перемешать (зависит от буфера случ.чисел).

Например: 243, 118, 96, 8, 71, 12, 203, 25 ,стало => 96, 12, 118, 203, 71, 243, 25, 8 smile.gif

PS сколько ответов, просто приятно smile.gif


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
Monty
  Дата 26.5.2003, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

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



Цитата(neutrino @ 26.5.2003, 10:54)
xor  si, si
mov  cx, n
next:
mov  al, a[si]
ror al, 1
mov  a[si], al
loop  next

Почти в точку biggrin.gif, я его подлатаю в одном месте и будет он ВАРИАНТ №2 biggrin.gif

PS Сразу не понял smile.gif

Это сообщение отредактировал(а) Monty - 26.5.2003, 14:09


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
Monty
  Дата 26.5.2003, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

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



Одно ясно, мой алгоритм перемешивания не обратим smile.gif
Кто может дать полезную ссылку? для ВАРИАНТА №3
DES тоже умеет перемешивать?! только он перемешивает биты smile.gif, но это не беда, подправим.
А где почитать незнаю sad.gif


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
neutrino
Дата 8.6.2003, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Вот послушай:
1) берем массив и делаем ротацию н-1 раз с первого до последнего символа
2) ротацию н-2 раз со второго символа
3) и так далее

Очень легко восстановить обратно, а чтобы запаристей было можно рандомизировать количество ротаций на каждой стадии и запомнить ети числа. После чего набор таких чисел будет паролем для расшифровки.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Monty
  Дата 8.6.2003, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

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



Спасибо neutrino, я все ни как ненайду время, чтоб на большом листе нарисовать как мой алг. перемешивает, чтоб написать обратный ему алг.

ЗЫ все уже зашифрованно ;)


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


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

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


 




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


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

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