2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
|
||||||
1 | ||||||
Перестановочный шифр.07.01.2012, 13:59. Показов 6864. Ответов 17
Метки нет (Все метки)
На основе этого мне нужно написать рабочий код на С++. Материал прочитан на несколько раз и уже выдвинуто множество идей, код пишется, но остается ощущения, что я двигаюсь в неправильном направление. Прошу вашей помощи пожалуйста!!! План действия, к-рый реализую: 1. ввожу текст с клавиатуры (уже в самом коде для простоты). Затем в массиве m[30] - должны хранится цифры, соответ порядку букв сообщения, о 0 до длины нашего вводимого текста. 2. В двумерный массив С[6][5] нужно по идеи сложить вписать массив m[30]. чтобы считать затем его по столбцам, таким образом мы получим перестановку (Было к примеру сообщение длиной 14: 1 2 3 4 ...14 а перестановка будет: (1 7 13 2 9 15 3 10...)) При считывания таким образом массива - мы заносим в другой одномерный массив Е[] - где будем хранить перестановку. Затем нужна матрица 30*30 с нулями, "1" на тех местах в матрице = порядковым номерам хранящихся в E[]. При умножении такой матрицы на исходной текст - мы получим перестановку. (шифр текст), а для расшифровки понадобится лишь обратная матрица к матрице 30*30, которую будем умножать на шифр - получать дешифр.
0
|
07.01.2012, 13:59 | |
Ответы с готовыми решениями:
17
Перестановочный шифр с ключевым словом Шифр Виженера, шифр Скитала В тексте заменить каждую букву на ту, что стоит следующей в алфавите C++ шифр |
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
07.01.2012, 14:06 | 2 |
Потому что делаешь конкретно скиталу методом перелёта из Москвы в Петербург с пересадкой на Марсе. Матричный ключ предназначен не для этого, а для универсального представления произвольных перестановок.
1
|
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
|
|
07.01.2012, 14:19 [ТС] | 3 |
усложнять полет я умею к сожалению( когда не все понимаю.
taras atavin, подскажи пожалуйста, что за перестановки будут? - Это перестановки, которые просто зависят от "диаметра скиталы"?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
07.01.2012, 14:21 | 4 |
Ты скиталу то понял? Мотают ленту на цилиндр и пишут поперёк, потом разматывают. В твоём случае соседние символы - это символы через каждые 5 символов.
0
|
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
|
|||||||||||
07.01.2012, 15:57 [ТС] | 5 | ||||||||||
Как правильно забить единичками матрицу с нужным промежутком 5 ?
0
|
Заблокирован
|
|
07.01.2012, 17:13 | 6 |
tymrfik, я бегло читал, поэтому если не в тему сори, не это искал
Шифрование методом перестановки
1
|
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
|
|
07.01.2012, 17:32 [ТС] | 7 |
Полезная вещь) правда все же с моей проблемой не справится/
-=ЮрА=-,
0
|
Заблокирован
|
|
07.01.2012, 17:43 | 8 |
сейчас прочту внимательно задание
Добавлено через 8 минут tymrfik, думаю проблемма только в умножении матриц, в остальном не вижу сложностей, написание алгоритма лишь вопрос времени, вот пост Как умножить матрицы, думаю он поможет справиться
0
|
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
|
||||||
07.01.2012, 17:50 [ТС] | 9 | |||||
умножение выполняется(уже дописывал к коду)! Тут оказывается другая проблема! матрица с забивается по циклу 5 одинаковыми значениями по всей своей размерности.
0
|
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
|
|
07.01.2012, 17:52 [ТС] | 10 |
0
|
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
|
|
07.01.2012, 19:19 [ТС] | 12 |
попробовал, к сожалению получается неверно
0
|
Заблокирован
|
|
07.01.2012, 19:46 | 13 |
- потому и неверно что заполняешь с[6][5] - её вообще не должно быть. Суть твоего алгоритма я привёл на скрине в MathCAD правда чтоб не мучаться я сделал твой же пример строка из 5-символов но если бы в неё было 10 или 12(не обязательно кратное 5 число брать) то всего лишь увеличилась размерность матрицы
enc(ключа шифрования). При этом важно чтобы enc была обратима(т.е. существовал определитель) иначе декодирования не выйдет
0
|
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
|
|
07.01.2012, 20:26 [ТС] | 14 |
-=ЮрА=-, Насчет матрицы с в сообщение 4-5 уже было исправлено. Она размерностью 30*30
и показывает лишь перестановки, которые происходят через 5 символов. То, что у меня было обозначено в 1 сообщение про матрицу с неверно.
0
|
Заблокирован
|
|
07.01.2012, 20:58 | 15 |
- тогда давай свою щифрующую матрицу enc 30х30(прям в топик текстовым полем все 30х30 нолей и единиц), посредством MathCAD найду её обратную и зашью в программу как дешифрующую. Тогда твоё шифрование будет осуществляться по алгоритму enc. В общем случае enc мы должны либо генерировать либо вводить вручную, причём по опред правилам - чтобы у матрицы был определитель(т.е. чтобы она была обратимой), далее должны програмно её обратить и держать в качестве дешифрующей - при такой реализации программа будет работать всегда с разным алгоритмом шифрования
0
|
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
|
||||||
07.01.2012, 21:24 [ТС] | 16 | |||||
так я чего-то недопонимаю.
Шифрующая последовательность выглядит так: t = {0, 6, 12, 18, 24, 1, 7, 13, 19,25,3, ...и т.д.}. потому что между буквами открытого текста 5 левых символов будет в шифре. Так вот в матрице c[30][30] единицы стоят на места: 0, 6, 12, 18, 24, 1, 7, 13, 19,25,3 .... После полученную матрицу с мы умножаем на наш открытый текст, где все по порядку от 0 до 29 . Для примера сейчас шифрую: char w[31]="molokomolokomolokomolokomoloko"; - где ровно 30 символов. попытки забить таки эту ужасную матрицу с
0
|
Заблокирован
|
|
07.01.2012, 22:42 | 17 |
tymrfik, у тебя должно быть 30 единиц - как ты собрался обратить матрицу 30х30 у которой даже на один определитель элементов не нашкребёшь???Вот смотри пускай у тебя единицы на главной диагонали - сколько единичек надо для главного определителя - очевидно 30
0
|
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
|
||||||
08.01.2012, 00:26 [ТС] | 18 | |||||
У меня и должно получится 30 "1". В каждой строке по одной "1", только нужно правильно заполнить для этого матрицу. А про места я имел в виду, что сначала единица в первой строке стоит на 0 месте, затем спускаемся на строчку (во второй) "1" заносим в строке на 0+6=6 место - т.е. пропускается пять символов, дальше на третей строке "1" заносится на 6+6=12 и так по строкам идти, на 6 строке получается "1" ставится на 24 место, а вот на 7 строке нужно начинать с 1, и чтобы 1+6=7, потом 13, потом 19 и т.п. Вот что я подразумевал. Мне не удается именно правильно заполнить таким образом матрицу С.
Добавлено через 1 час 6 минут Здесь только Шифр, пока не обработанный в отдельную функцию. Но главное можете проверить на правильность?! пожалуйста!
если нетрудно напишите пожалуйста дешифратор?! заранее благодарен за посильную помощь!
0
|
08.01.2012, 00:26 | |
08.01.2012, 00:26 | |
Помогаю со студенческими работами здесь
18
шифр RSA Шифр Виженера на C++ Шифр цезаря Шифр Виженера Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |