Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм Рюкзака 
:(
    Опции темы
Lirius
  Дата 14.5.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



Вот то что написал, почему то не работает дешифрование. Помогите плзз.

Код

using System;
using System.Collections;
using System.Windows.Forms;

namespace alg_rukzaka
{
    public class Rukzak 
    {
        private int size = 10;
        private ulong[] private_key;
        private ulong[] public_key;
        private ArrayList list = new ArrayList();
        private ArrayList reslist = new ArrayList();
        private ulong N = 0; // sum of all elements private_key
        private int X = 0, Y = 0;
            
        public Rukzak() 
        {
            private_key = new ulong[size];
            public_key = new ulong[size];
        }
        public Rukzak(int s) 
        {
            size = s;
            private_key = new ulong[size];
            public_key = new ulong[size];
        }
        public void CreateUpSequence(ListBox list) 
        {
            list.Items.Clear();
            Random r = new Random();
            checked
            {
                ulong sum = 0;
                for (int i = 0; i < size; i++)
                {
                    sum = 0;
                    for (int j = 0; j < i; j++)
                        sum += private_key[j];

                    private_key[i] = sum + 1;
                    list.Items.Add(private_key[i]);
                }
            }
        }
        public void CreateNormalSequence(Label l1,Label l2,ListBox lst) 
        {
            lst.Items.Clear();
            N = 0;
            X = 0;
            Random r = new Random();
            for (int i = 0; i < size; i++)
                N += private_key[i];
                   
            l1.Text = N.ToString();
            while (NOD(N,(ulong)X) != 1)
                X = r.Next();
            l2.Text = X.ToString();
            for (int i = 0; i < size; i++)
            {
                public_key[i] = (private_key[i] * (ulong)X) % N;
                lst.Items.Add(public_key[i]);
            }

        }
        public void Encrypt(RichTextBox t1,RichTextBox t2) 
        {
            t2.Text = "";
            list.Clear();
            char[] txt = t1.Text.ToCharArray();
            int[] bits = new int[size*(txt.Length-1)];
            int[] sb = new int[8];
            ulong sum = 0;
            int h = 0;
            for (int i = 0; i < txt.Length; i++)
            {
                sb = GetBits(Convert.ToInt32(txt[i]));
                for (int j = 0; j < sb.Length; j++)
                    bits[h++] = sb[j];
            }

            for (int i = 0; i < bits.Length; i+=size)
            {
                int step = 0;
                sum = 0;
                for (int j = i; j < (size+i); j++)
                {
                    sum += (ulong)bits[j]*public_key[step++];
                }
                list.Add(sum);
                t2.Text += sum + " ";
            }
        }
        public void Decrypt(RichTextBox t,Label l,RichTextBox txt) 
        {
            t.Text = "";
            reslist.Clear();
            Y = 0;
            int[] bits = new int[size * (txt.Text.Length - 1)];
            int[] sb = new int[8];
            int h=bits.Length-1;
            ulong tmp = 0;
            int k=0;
            Random r = new Random();
            while ((ulong)(X*Y)%N!=1)
                Y = r.Next();
                
            l.Text = Y.ToString();
                        
            for (int i = 0; i < list.Count; i++)
            {
                tmp = ((ulong)list[i] * (ulong)Y) % N;
                reslist.Add(tmp);
                t.Text += reslist[i].ToString() + " ";
            }
            for (int v = 0; v < reslist.Count; v++)
            {
                for (int i = size - 1; i >= 0; i--)
                {
                    if (private_key[i] <= (ulong)reslist[v])
                    {
                        bits[h] = 1;
                        reslist[v] = (ulong)reslist[v] - private_key[i];
                        h--;
                    }
                    else
                    {
                        bits[h] = 0;
                        h--;
                    }
                }
            }
            t.Text += "\n";
            for (int i = 0; i < bits.Length; i++)
                t.Text += bits[i].ToString();
            t.Text += "\n";
            for (int i = 0; i < bits.Length; i++)
            {
                if (k >= sb.Length) 
                {
                    k = 0;
                    t.Text += GetDigit(sb) + " ";
                }
                sb[k++] = bits[i];
            }
                
            
        }
        private int[] GetBits(int number)
        {
            int displayMask = 1 << 7;
            int[] mas = new int[8];

            for (int c = 0; c < 8; c++)
            {
                mas[c] = (number & displayMask) == 0 ? 0 : 1;
                number <<= 1;
            }

            return mas;
        }
        private int GetDigit(int[] mas)
        {
            string tmp = "";
            int res = 0;
            for (int i = 0; i < mas.Length; i++)
                tmp += mas[i].ToString();
            res = Convert.ToInt32(tmp, 2);
            return res;
        }
        private int NOD(ulong a, ulong b)
        {
            if (a == 0 || b == 0) return 0;
            //if (Math.Abs(Convert.ToInt32(a)) > Math.Abs(Convert.ToInt32(b)))
            if (a > b)
            {
                if (b == 1) return 1;
                return NOD(b, a % b);
            }
            else
            {
                if (a == 1) return 1;
                return NOD(a, b % a);
            }
        }

    }
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0399 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.