PDA

Просмотр полной версии : Помогите с шифрованием


Bubblegum
20.12.2005, 21:19
Привет всем Подскажите ак можно запрограмировать вот это



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

В таблице (http://r13s.narod.ru/Excel.rar) Вижинера каждая строка представляет собой циклически сдвинутую на один символ предыдущую строку таблицы таким образом что каждая строка по своей сути является таблицей подстановки шифратора Цезаря для конкретного значения ключа.
Таблица Вижинера используется для шифрования и дешифрирования.
Верхняя строка таблицы Вижинера используется для задания символов исходных текстов, а левый столбец для задания символов криптографического ключа.
При шифровании исходного сообщения его записывают в строку, а под ним ключевое слово либо фразу. Если ключ оказался короче исходного текста, то его циклически повторяют необходимое число раз. На каждом шаге шифрования в верхней строке таблицы Вижинера находят очередную букву исходного текста, а в левом столбце очередное значение символа ключа. В результате очередная буква шифротекста находится на пересечении столбца определенного символом исходного текста и строки соответствующей строке символа ключа.
При шифровании слова М=”КРИПТОГРАФИЯ” по методу Вижинера для ключа 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
Вот что замутил (http://r13s.narod.ru/shifr.rar),
Подскажите что далее

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
Вах! Чудеса какие-то!!!!

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

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

Если ты потрейсишь в цикле массив "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
Тестируем этот скрипт.

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
.
.
.
data.push(tmp+"!");
Получится даже проще, чем предложил я.
Вы не правы. :) Ваша поправка заполняет массив - массивами. Т.е. генерируется двумерный массив, как и было задумано.
В примере Ieshua получается одномерный массив, заполненный строками. :) Но его "ИТОГ расследований" вроде достойно ответил на вопрос про ссылки!

Ieshua
25.12.2005, 22:06
Товарищ Х искренно просит прощения :D

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

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

data.push(tmp+"");

Хотя это мало что меняет. Массив не будет двухмерным.
И, действительно, походу передача ссылки происходит только при совершении определенных операций.

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

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

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

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

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

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

sergwizard
27.12.2005, 02:36
А вот такой вариант не подойдет?