Важная информация

User Tag List

Показано с 1 по 9 из 9

Тема: Криптография методом перестановки.

  1. #1
    Guru Аватар для ALKO
    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,257
    Спасибо Благодарностей отдано 
    76
    Спасибо Благодарностей получено 
    183
    Поблагодарили
    86 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Криптография методом перестановки.

    Поделитесь пожалуйста прогой на бейсике, если есть таковая.
    Кодер и декодер шифра методом перестановки с использованием слова-ключа.
    Последний раз редактировалось ALKO; 09.02.2013 в 22:54.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    нужно просто примитивное шифрование или криптографически стойкое? примитивное можно самому придумать, но рассчитывать на него нельзя вообще. стойкое - брать только готовое, придумывание ни к чему хорошему не приводит.

    и почему именно перестановки?

  4. #3
    Guru Аватар для ALKO
    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,257
    Спасибо Благодарностей отдано 
    76
    Спасибо Благодарностей получено 
    183
    Поблагодарили
    86 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    нужно просто примитивное шифрование или криптографически стойкое?
    Примитивное сойдёт.
    Цитата Сообщение от psb Посмотреть сообщение
    и почему именно перестановки?
    Ну потому-что оно примитивное.

  5. #4
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Предложу примитивный XOR RND(), хоть это и не перестановка.

  6. #5
    Guru Аватар для ALKO
    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,257
    Спасибо Благодарностей отдано 
    76
    Спасибо Благодарностей получено 
    183
    Поблагодарили
    86 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Есть исходник на си шарпе... Но, мне кажется, там сложновато будет переделать под синклер-бейсик.
    Код:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Shifr1
    {
        public partial class Form1 : Form
        {
            char FirstLetter;
            int strok;
            int stolb;
            char [,]arrR = new char[12,12];
            string sR;   // Копируем строку без пробелов для передачи в функцию расшифровки
            int click = 0;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                click = 0;
                if (textBox2.Text.Length < 1)
                {
                    richTextBox1.Text = richTextBox2.Text = "мг...давай, до свидания...введи кодовое слово\n";
                    return;
                }
                //---------------------------------------------------------
                string soob = textBox1.Text;
                string kodslovo = textBox2.Text;
                
    
                soob = BezProbelov(soob);
                kodslovo = BezProbelov(kodslovo);
                
                
                sR = kodslovo;
                int stolb = kodslovo.Length;
                double strok_double = Convert.ToDouble(soob.Length) / Convert.ToDouble(stolb);
                int strok = Convert.ToInt16(Math.Ceiling(strok_double)) + 1;
                char[,] arr = new char[12, 12];
                arr = TWOmermassiv(arr, strok, stolb, kodslovo);
                int ind = 0;
                int maxind = soob.Length;
    
                //---------------------------------------------------------
                for (int i = 1; i < strok; i++)          //// Записываем шифруемое слово в двухмерный массив
                {
                    for (int j = 0; j < stolb; j++)
                    {
                        arr[i,j] = soob[ind];
                        ind = ind + 1;
                        if (ind>=maxind) break;
                    }
                    if (ind >= maxind) break;
                }
                /// Шифруем сообщение
                Shifruet(arr);
                
                //------------------------------------------------------------
                for (int i = 0; i < stolb; i++)         //// Читаем из массива зашифрованное сообщение
                {
                    for (int j = 1; j < strok; j++)
                    {
                        richTextBox1.Text+=arr[j, i];
                    }
                }
                richTextBox1.Text += "\n";
                
                //--------------------------------------------------------------
                for (int i = 0; i < strok; i++)         //// для расшифровки копируем зашифрованное сообщение
                {
                    for (int j = 0; j < stolb; j++)
                    {
                        arrR[i, j] = arr[i, j];
                    }
                }
                //   этосообщениеследуетотправить 
    
            }
            private char[,] TWOmermassiv(char[,] arr,int Lstrok,int Lstolb, string s) // Создаётся массив шириной длины кодового слова
            {
                arr = new char[Lstrok, Lstolb];
                for (int i = 0; i < Lstolb; i++)
                {
                    arr[0, i] = s[i];
                }
                strok = Lstrok;
                stolb = Lstolb;
                return arr;
            }
            private void Shifruet(char[,] arr)   // Шифруем сообщение перемещая все столбы
            {
                for (int j = 0; j < stolb; j++)
                {
                    for (int i = 0; i < stolb; i++)
                    {
                        if (arr[0, i] > arr[0, j])
                        {
                            for (int k = 0; k < strok; k++)
                            {
                                FirstLetter = arr[k, i];
                                arr[k, i] = arr[k, j];
                                arr[k, j] = FirstLetter;
                            }
                            i = 0;
                        }
                    }
    
                }
            }
    
            private void Rashifr()
            {
                
                char[,] arr2 = new char[2, stolb];                //// Создаём 2мерный массив. 0-ая строка хранит кодовое слово, 1-ая индексы букв
                for (int z = 0; z < sR.Length; z++)
                {
                    arr2[0, z] = sR[z];             ////    заполняем 0ую кодовым словом
                }
                for (int z = 0; z < sR.Length; z++)
                {
                    arr2[1, z] = Convert.ToChar(z);         //// заполняем 1ую индексами
                }
                //---------------------------------------------------------------
                for (int j = 0; j < stolb; j++)             ////  сортируем по 0ой строке, то есть по буквам
                {
                    for (int i = 0; i < stolb; i++)
                    {
                        if (arr2[0, i] > arr2[0, j])
                        {
                            for (int k = 0; k < 2; k++)
                            {
                                FirstLetter = arr2[k, i];
                                arr2[k, i] = arr2[k, j];
                                arr2[k, j] = FirstLetter;
                            }
                            i = 0;
                        }
                    }
    
                }
    
                if(click==0)
                {
                    for (int i = 0; i < stolb; i++)         ///// заменяем 0ую строку закодированного сообщения на отсортированные индексы
                    {
                        arrR[0, i] = arr2[1, i];
                    }
                    Shifruet(arrR);             /////  сортируем по новой, нулевой строке, по индексам закодированное сообщение
                    click++;
                }
    
                for (int i = 1; i < strok; i++)        //// выводим во втрой ричьбокс
                {
                    for (int j = 0; j < stolb; j++)
                    {
                        richTextBox2.Text += arrR[i, j];
                    }
                }
                richTextBox2.Text += "\n";
            }
    
            private string BezProbelov(string bezS)
            {
                string R;
                for (int f = 0; f < bezS.Length; f++)
                {
                    if (bezS[f] == ' ')
                    {
                        R = bezS.Substring(0, f);
                        R += bezS.Substring(f + 1, bezS.Length - f - 1);
                        bezS = R;
                        f = 0;
                    }
                }
                return bezS;
            }
            private void button2_Click(object sender, EventArgs e)
            {
                Rashifr();
            }
        }
    }

  7. #6
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    самый простой алгоритм тогда, который в голову пришел, типа того:

    берем код 1 буквы пароля, находим остаток от деления на длину шифруемой строки, получаем число Х от 0 до длина-1. берем из шифруемой строки букву номер Х и добавляем к выходной строке. из входной строки эту букву выкусываем, ее длина уменьшается на 1. берем след. букву пароля и т.д. когда пароль кончился, начинаем с его начала.

    можно еще проще:

    менять местами буквы в строке, индексы букв высчитывать из пароля (например, тоже нахождением остатка от деления). но тут надо смотреть, чтобы число перестановок букв было велико, и буквы затрагивались разные, даже если в пароле всего 1-2 буквы (например, подмешивать счетчик цикла).

  8. #7
    Guru Аватар для ALKO
    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,257
    Спасибо Благодарностей отдано 
    76
    Спасибо Благодарностей получено 
    183
    Поблагодарили
    86 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так-с... Шифратор намутил.
    Теперь дешифровать это надо.
    (прога конечно мозговыносная получилась)
    Вложения Вложения
    • Тип файла: rar code.rar (2.5 Кб, Просмотров: 93)

  9. #8
    Junior Аватар для profAleks
    Регистрация
    18.09.2011
    Адрес
    г. Щекино, Тульская обл.
    Сообщений
    27
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    Предложу примитивный XOR RND(), хоть это и не перестановка.
    Берем матрицу 8х8 байт, склавываем с матрицей ключа 8х8 -> все, файл зашифрован.
    На второй стороне выполняем вычитание -> файл расшифрован.

  10. #9
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для надежного шифрования - рекомендую свою реализацию AES.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •