Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Помогите с шифрованием (http://www.flasher.ru/forum/showthread.php?t=73377)

Bubblegum 20.12.2005 21:19

Помогите с шифрованием
 
Привет всем Подскажите ак можно запрограмировать вот это



Шифратор Виженера в своей сути использует развитие идеи Цезаря. Отличается только тем, что число реальных таблиц подстановки зависит от длины используемого ключа. Этот шифр много алфавитной подстановки можно описать таблицей шифрования называемой таблицей (квадратом) Виженера. Ниже приведен пример таблицы Виженера.

В таблице Вижинера каждая строка представляет собой циклически сдвинутую на один символ предыдущую строку таблицы таким образом что каждая строка по своей сути является таблицей подстановки шифратора Цезаря для конкретного значения ключа.
Таблица Вижинера используется для шифрования и дешифрирования.
Верхняя строка таблицы Вижинера используется для задания символов исходных текстов, а левый столбец для задания символов криптографического ключа.
При шифровании исходного сообщения его записывают в строку, а под ним ключевое слово либо фразу. Если ключ оказался короче исходного текста, то его циклически повторяют необходимое число раз. На каждом шаге шифрования в верхней строке таблицы Вижинера находят очередную букву исходного текста, а в левом столбце очередное значение символа ключа. В результате очередная буква шифротекста находится на пересечении столбца определенного символом исходного текста и строки соответствующей строке символа ключа.
При шифровании слова М=”КРИПТОГРАФИЯ” по методу Вижинера для ключа k=“ШИФР” предварительно исходный текст и ключевое слова запишем в виде двух строк.

К Р И П Т O Г Р А Ф И Я
Ш И Ф Р Ш И Ф Р Ш И Ф Р



Тогда первая буква исходного текста ‘К’ определяет десятый столбец таблицы Вижинера а буква ‘Ш’ ключа 24-ую строку таблицы на пересечении которых находится символ шифротекста ‘В’. Окончательный результат шифрования имеет вид EK(M)=”ВЩЭЯЛЧШАЩЭЭР”.

Текст должен читаться из файла

Спасибо

KUZEN 20.12.2005 21:55

надо подумать ...

ffffff 20.12.2005 22:56

просто используй не таблицу а код ascii. и совместимоть будет больше.

делаешь сдвиг и простенькую проверку что если булеь 255 то отнять 255.

Skubent 21.12.2005 12:03

Все буквы - в коды ascii, как совершенно правильно заметил ffffff.
Делаешь массив A из таблицы (ручками). Или подгружаешь его из файла - это уж как удобнее.
Столбец (i) = код буквы.
Строка (j) = код буквы шифра. Номер буквы шифра есть остаток от деления позиции шифруемого символа на длину ключа (при нумеровании от 0).
Соответственно символ шифротекста = A[i][j]

Bubblegum 21.12.2005 20:42

Товарищи Флэшеры помогите мне, а то с программированием я совсем чайник, знаю про скрипты не много (учусь пока) я знаю флэшь хорошо только со стороны холста, а с програмной частью у меня напряг

Antares 21.12.2005 20:45

md5 -- и жизнь продолжается.

Bubblegum 21.12.2005 21:09

Вот что замутил,
Подскажите что далее

Bubblegum 21.12.2005 23:32

Подсажите как задать двумерный массив вещественныйх чисел

Antares 21.12.2005 23:53

Код:

var multiDimensionalArray:Array = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 0]];

Bubblegum 22.12.2005 01:12

Весь день бьюсь с этим, уже 5 утра
вот че надумал
http://r13s.narod.ru/s.rar
подскажите новичку что дальше...

MOHCTEP 22.12.2005 01:41

Вах! Чудеса какие-то!!!!
Код:

var str="абвгдежзийклмнопрстуфхцчшщъыьэюя";
var data:Array=[];
var sl=str.length;
trace(str+'\t'+str.length);
init();
function init(){
        var tmp:Array=str.split('');
        trace("1 трейс массива");
        for(var i=0;i<sl;i++){
                var a=tmp.shift();
                tmp.push(a);
                data.push(tmp);
                trace(i+'\t'+data[i]);
        }
        trace("А вот 2 трейс готового массива!");
        for(i=0;i<sl;i++){
                trace(i+'\t'+data[i]);
        }
}

Второй трейс кажет, что массив забит НЕМОДИФИЦИРОВАННЫМИ данными!???!
Это как это???

Bubblegum 23.12.2005 15:14

Неужели ни кто не знает как запрограммировать этот метод?
(Я знаю? что все знают, просто ни кто не хочет мне помочь.)
А вы знаете, что программ подобных этой в сети не так много. Сколько я смотрел в Интернете исходников не нашел.

nyctota 23.12.2005 17:29

Цитата:

Сообщение от MOHCTEP
Вах! Чудеса какие-то!!!!

.............................................

Второй трейс кажет, что массив забит НЕМОДИФИЦИРОВАННЫМИ данными!???!
Это как это???

Если ты потрейсишь в цикле массив "data", то увидишь, что Флэш каждую итерацию цикла заполняет этот массив (все элементы) содержимым массива "tmp", какое оно есть на момент итерации.
Почему это происходит? Похоже на то, как будто в массиве "data" хранятся ссылки на массив "tmp", а не значения...
Кто знает точно, подтвердите мысль.

Поэтому твой код можно переписать так:
Код:

var str="абвгдежзийклмнопрстуфхцчшщъыьэюя";
var data:Array=[];
var sl=str.length;
trace(str+'\t'+str.length);
init();
function init(){
var tmp:Array=str.split('');
trace("1 трейс массива");
for(var i=0;i<sl;i++){
var a=tmp.shift();
tmp.push(a);
data.push(tmp.join('').split(''));
trace(i+'\t'+data[i]);
}
trace("А вот 2 трейс готового массива!");
for(i=0;i<sl;i++){
trace(i+'\t'+data[i]);
}
}


MOHCTEP 24.12.2005 02:42

2 nyctota Спасибо, попытаю, только странно это как-то и не совсем понятно?

nyctota 24.12.2005 13:20

2 МОНСТЕР:
Ну, почему непонятно. Во многих (или всех серьезных? =/) языках программирования есть передача ссылки на объект. Ждем-с подтверждения от знающих людей о наличие такой возможности во Флэше (хотя, по-моему, это только что было доказано нами :D)

2 Bubblegum:
Тебе по идее все карты в руки даны -- дерзай!

Ieshua 24.12.2005 14:13

Тестируем этот скрипт.
Код:

var str = "абвгд";
var data:Array = [];
var sl = str.length;
trace(str+'\t'+str.length);
init();
function init() {
        var tmp:Array = str.split('');
        trace("1 трейс массива");
        for (var i = 0; i<sl; i++) {
                var a = tmp.shift();
                tmp.push(a);
                data.push(tmp+"!");
                trace(data[i]);
        }
        trace("А вот 2 трейс готового массива!");
        for (i=0; i<sl; i++) {
                trace(i+'\t'+data[i]);
        }
}

вот и ответ на ваш вопрос ;)


Код:

var str = "абвгд";
var data:Array = [];
var sl = str.length;
trace(str+'\t'+str.length);
init();
function init() {
        var tmp:Array = str.split('');
        trace("1 трейс массива");
        for (var i = 0; i<sl; i++) {
                var a = tmp.shift();
                tmp.push(a);
                trace(tmp);
                //следующая строка заполняет каждый элемент массива data содержимым tmp это будет видно в трейсе
                data.push(tmp);
                trace(data);
        }
}

Кажется ошибка работы массивов...0_0

Ieshua 24.12.2005 15:26

хм...Я так понимаю массив TMP после shift и push - приобретает некоторый вид...
И если он затем закладывается в другой массив...ээ...глюки начинаются =) весь массив таинственным образом перезаписывается...

Ieshua 24.12.2005 17:20

ИТОГ расследований ;)
Код:

arr = [];
str = [1, 2, 3];
arr.push(str);
trace(arr);  //выводит 1,2,3
str.reverse();
trace(arr);  //выводит 3,2,1

Цитата:

Похоже на то, как будто в массиве "data" хранятся ссылки на массив "tmp", а не значения...
Мысль здравая, но такой прием работает только, если с массивом проводится определенная операция(push,reverse,shift...etc).

Код:

arr = [];
str = [1, 2, 3];
arr.push(str);
trace(arr);  //выводит 1,2,3
str= [6,6,6]
trace(arr);  //выводит 1,2,3

//

MOHCTEP 25.12.2005 11:28

nyctota, Ieshua: Благодарю друзья! После столь развернутого объяснения и примеров, все стало предельно ясно! :)

MOHCTEP 25.12.2005 11:34

nyctota, Ieshua: Благодарю друзья! После столь развернутого объяснения и примеров, все стало предельно ясно! :)

nyctota 25.12.2005 12:04

Цитата:

Сообщение от Ieshua
Тестируем этот скрипт.
Код:

var str = "абвгд";
var data:Array = [];
var sl = str.length;
trace(str+'\t'+str.length);
init();
function init() {
        var tmp:Array = str.split('');
        trace("1 трейс массива");
        for (var i = 0; i<sl; i++) {
                var a = tmp.shift();
                tmp.push(a);
                data.push(tmp+"!");
                trace(data[i]);
        }
        trace("А вот 2 трейс готового массива!");
        for (i=0; i<sl; i++) {
                trace(i+'\t'+data[i]);
        }
}

вот и ответ на ваш вопрос ;)

Ну, это не совсем ответ. Это скорее проверка того, как Флэш меняет типы переменных в зависимости от контекста.

В твоем примере красным выделена строка, которая "виновна" в том, что выражение в скобках становится строковым. Можно написать вместо этого
Код:

data.push(tmp+"!");
Получится даже проще, чем предложил я.

Ieshua 25.12.2005 14:33

Кто нибудь в итоге понял, с чем мы столкнулись и как это классифицировать?

Antares 25.12.2005 20:58

Не понимаю, в чем суть проблемы. Посмотрел. Все работает, как и должно.

P.S. Очень прошу товарища Х больше не писать мне писем с вопросами. Для этого есть форум.

MOHCTEP 25.12.2005 21:09

Цитата:

Сообщение от nyctota
Код:

.
.
.
data.push(tmp+"!");

Получится даже проще, чем предложил я.

Вы не правы. :) Ваша поправка заполняет массив - массивами. Т.е. генерируется двумерный массив, как и было задумано.
В примере Ieshua получается одномерный массив, заполненный строками. :) Но его "ИТОГ расследований" вроде достойно ответил на вопрос про ссылки!

Ieshua 25.12.2005 22:06

Товарищ Х искренно просит прощения :D

nyctota 26.12.2005 18:11

Цитата:

Сообщение от MOHCTEP
Вы не правы. :) Ваша поправка заполняет массив - массивами. Т.е. генерируется двумерный массив, как и было задумано.
В примере Ieshua получается одномерный массив, заполненный строками. :) Но его "ИТОГ расследований" вроде достойно ответил на вопрос про ссылки!

Да запарился я)) Скопировал его строку, но не исправил. Хотел написать
Код:

data.push(tmp+"");
Хотя это мало что меняет. Массив не будет двухмерным.
И, действительно, походу передача ссылки происходит только при совершении определенных операций.

Расследование можно считать завершенным, топик закрытым %)

Если, конечно, г-н Антарес не выскажет своего мнения, когда вникнет в суть нашего вопроса. Мнение будет интересно (мне по-крайней мере).

to Antares:
Внимание на пост МОНСТЕРа, который начинается со слов
Код:

Вах! Чудеса какие-то!!!!
Код, следующий далее, работает не совсем так, как ожидалось им, мной (и, думаю, не только нами). К тому же я не встречал упоминания о ссылках на объекты во Флэш (кажется). Поэтому ваше "Посмотрел. Все работает, как и должно." впечатлило. :D
Может поделитесь информацией?

Ieshua 26.12.2005 21:58

Товарисч Х тоже попросил посмотреть, но получил жесткый подзатыльник в ответ, видимо:
Все работает, как и должно.(С)

sergwizard 27.12.2005 02:36

Вложений: 1
А вот такой вариант не подойдет?


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

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