Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Linear feedback shift register/Линейный сдвиговый регистр с обратной связью (http://www.flasher.ru/forum/showthread.php?t=120492)

wvxvw 22.01.2009 02:47

Linear feedback shift register/Линейный сдвиговый регистр с обратной связью
 
Пытаюсь написать обратную функцию...
Совсем запутался... может кто моможет? А то я в этом не очень...

Код AS3:

var reg:uint = "A".charCodeAt();
var bit:uint;
var counter:int = 17;
var out:String = "";
out = reg.toString(2);
while(out.length < 16) out = "0" + out;
trace(out);
while(counter--)
{
          bit = (reg & 0x0001) ^
                        ((reg & 0x0004) >> 2) ^
                        ((reg & 0x0008) >> 3) ^
                        ((reg & 0x0020) >> 5);
          reg = (reg >> 1) | (bit << 15);
          out = reg.toString(2);
          while(out.length < 16) out = "0" + out;
          trace("#", counter, "\t=>", out, "\t=>", String.fromCharCode(reg));
}
trace("------ decode -------");
counter = 17;
while(counter--)
{
          bit = (reg & 0x0020) ^
                        ((reg & 0x0008) << 5) ^
                        ((reg & 0x0004) << 3) ^
                        ((reg & 0x0001) << 2);
          reg = (reg << 1) <Что должно быть тут?>;
          out = reg.toString(2);
          while(out.length < 16) out = "0" + out;
          trace("#", counter, "\t=>", out, "\t=>", String.fromCharCode(reg));
}

Ссылка на Википедию с объяснением

badun 22.01.2009 23:14

а оно вообще можно таким образом?

wvxvw 23.01.2009 00:14

Вот меня тоже сомнения начали мучать... я наверное чего-то не так сделал в енкодере... =( я не совсем понимаю по какому принципу добавляется первый бит, поэтому не понимаю как получить последний в обратной функции... наверное проще было бы сделать чтобы это был просто последний бит который "не влез".

badun 23.01.2009 12:59

Старший бит устанавливается если 1й, 3й, 4й и 6й биты по ксору дают единицу, т.е. если из них 4ых установлены 1 или 3 разряда. Если установлены 0, 2 или 4 бита, старший соответственно будет нулем.
Короче вот таким вот образом, как в исходнике написано, исходную последовательность не восстановить.
А в чем задача то вообще состоит?

wvxvw 23.01.2009 15:28

Задача была сделать текстовую информацию нечитаемой, а потом читаемой обратно :) Я наверное просто что-то не так понял / не так переписал в исходном преобразовании. Т.е. в таком варианте можно будет проверить только то, что переданый ключ был получен, но никак не получить новую информацию... Вобщем, ладно, спасибо, сделаю просто сдвиг вправо а потом влево. Не так уж важно...

EDIT:
Вобщем, вот на этом сердце успокоилось :)
Код AS3:

var reg:uint = "Z".charCodeAt();
var counter:int = 16;
var out:String = "";
out = reg.toString(2);
while(out.length < 16) out = "0" + out;
trace(out);
while(counter--)
{
        reg = (reg >> 1) | ((reg & 1) << 15);
        out = reg.toString(2);
        while(out.length < 16) out = "0" + out;
        trace("#", counter, "\t=>", out, "\t=>", String.fromCharCode(reg));
}
trace("------ decode -------");
counter = 16;
while(counter--)
{
        reg = ((reg << 1) & 0xFFFE) | (reg >> 15);
        out = reg.toString(2);
        while(out.length < 16) out = "0" + out;
        trace("#", counter, "\t=>", out, "\t=>", String.fromCharCode(reg));
}


badun 23.01.2009 18:05

так а чем простой XOR не устроил?

wvxvw 23.01.2009 18:09

Чесно... это совсем не моя сильная сторона :) А каким образом с помощью XOR (^) можно сделать что-то похожее?

DarkLight 23.01.2009 18:16

Вкратце: (a^x)^x = a, т е побайтово xor-им с числом каким-то, а потом повторение этой операции нам расшифрует данные

wvxvw 23.01.2009 18:43

Ааа.... спасибо, да, понял, действительно просто :)


Часовой пояс GMT +4, время: 14:59.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.