![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Modus ponens
|
Пытаюсь написать обратную функцию...
Совсем запутался... может кто моможет? А то я в этом не очень... 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)); }
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 269
|
а оно вообще можно таким образом?
|
|
|||||
|
Modus ponens
|
Вот меня тоже сомнения начали мучать... я наверное чего-то не так сделал в енкодере... =( я не совсем понимаю по какому принципу добавляется первый бит, поэтому не понимаю как получить последний в обратной функции... наверное проще было бы сделать чтобы это был просто последний бит который "не влез".
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 269
|
Старший бит устанавливается если 1й, 3й, 4й и 6й биты по ксору дают единицу, т.е. если из них 4ых установлены 1 или 3 разряда. Если установлены 0, 2 или 4 бита, старший соответственно будет нулем.
Короче вот таким вот образом, как в исходнике написано, исходную последовательность не восстановить. А в чем задача то вообще состоит? |
|
|||||
|
Modus ponens
|
Задача была сделать текстовую информацию нечитаемой, а потом читаемой обратно
Я наверное просто что-то не так понял / не так переписал в исходном преобразовании. Т.е. в таком варианте можно будет проверить только то, что переданый ключ был получен, но никак не получить новую информацию... Вобщем, ладно, спасибо, сделаю просто сдвиг вправо а потом влево. Не так уж важно...EDIT: Вобщем, вот на этом сердце успокоилось ![]() 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)); }
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 23.01.2009 в 16:11. |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 269
|
так а чем простой XOR не устроил?
|
|
|||||
|
ветеран форума
|
Вкратце: (a^x)^x = a, т е побайтово xor-им с числом каким-то, а потом повторение этой операции нам расшифрует данные
__________________
4am is time to rock |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:14. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| lfsr , xor |
|
|