Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2010, 15:11   #1
Не_знаю
Новичок
Джуниор
 
Регистрация: 31.05.2010
Сообщений: 1
По умолчанию Криптография (алгоритм)

Здравствуйте! Помогите пожалуйста разобраться, пишу алгоритм "Гаммирование с обратной связью", вроде как разобрался с шифрованием и расшифрованием, но не работает... выкладываю процедуры:
(пишу С#)

Шифрование:
Код:
{
            cr_s = "";
            Data.Text = "";
            int i;
            Random a = new Random();
            UInt32 sin1, sin2;
            sin1 = Convert.ToUInt32(a.Next());
            sin2 = Convert.ToUInt32(a.Next());
            circle_zash(ref sin1, ref sin2);
            const_a = sin1;
            const_b = sin2;
            UInt32[] mas_new = new UInt32[s.Length];
            for (i = 0; i < s.Length - 1; i = i + 2)
            {
                circle_zash(ref sin1, ref sin2);
                mas_new[i] = Convert.ToUInt32((int)s[i]) ^ sin1;
                mas_new[i + 1] = Convert.ToUInt32((int)s[i + 1]) ^ sin2;
                sin1 = mas_new[i];
                sin2 = mas_new[i + 1];
            }
            for (i = 0; i < mas_new.Length; i++)
                cr_s += Convert.ToChar((byte)mas_new[i]);
            button7.Enabled = true;
            Data.Text = cr_s;
 }

Дешифрование:
{
            s_wr = "";
            Data.Text = "";
            int i;
            UInt32 sin1, sin2;
            sin1 = const_a;
            sin2 = const_b;
// const_a и const_b - синхропосылка
            UInt32[] mas_new = new UInt32[s_de.Length];
            for (i = 0; i < s_de.Length - 1; i = i + 2)
            {
                circle_zash(ref sin1, ref sin2);
                mas_new[i] = Convert.ToUInt32(s_de[i]) ^ sin1;
                mas_new[i + 1] = Convert.ToUInt32(s_de[i + 1]) ^ sin2;
                sin1 = mas_new[i];
                sin2 = mas_new[i + 1];
            }
                for (i = 0; i < mas_new.Length; i++)
                    s_wr += Convert.ToChar((byte)mas_new[i]);
            button3.Enabled = true;
            Data.Text = s_wr;
}
(ну вобщем то они одинаковые)

и вложенные циклы:
private void circle_zash(ref UInt32 a, ref UInt32 b)
        {
            int j,k;
            string ku;
            for (j = 0; j < 3; j++)
            {
                for (k = 0; k < 7; k++)
                {
                    UInt32 w = Convert.ToUInt32(keymas[k], 2);
                    ku = Convert.ToString(keymas[k]);
                    UInt32 f = BaseCircle(ref a, ref b, ku);
                }
            }
            for (k = 7; k < 0; k--)
            {
                UInt32 w = Convert.ToUInt32(keymas[k], 2);
                ku = Convert.ToString(keymas[k]);
                UInt32 f = BaseCircle(ref a, ref b, ku);
            }
        }

private UInt32 BaseCircle(ref  UInt32 a, ref UInt32 b, string k)
        {
            UInt32 S;
            UInt32 N1 = a;
            UInt32 N2 = b;
            UInt32 X = Convert.ToUInt32(k, 2);
            S = N1 ^ X;
            int i;
            string s32 = Convert.ToString(S, 2);
            string[] si = new string[8];
            for (i = 0; i < 8; i++)
            {
                if (s32.Length >= 4)
                {
                    si[i] = s32.Substring(s32.Length - 4);
                    s32 = s32.Remove(s32.Length - 4);
                }
                if (s32.Length == 0){ si[i] = "0000"; }
                else if (s32.Length < 4)
                {
                    si[i] = s32;
                    s32 = "";
                }
            }
            for (i = 0; i < 8; i++)
                si[i] = zamena(ref si[i], i);
            s32 = "";
            for (i = 0; i < 8; i++)
                s32 = si[i] + s32;
            S = Convert.ToUInt32(s32,2);
            S = S << 11;
            S = S ^ N2;
            N2 = N1;
            N1 = S;
            a = N1;
            b = N2;
            return S;
}
Буду очень признателен.

Последний раз редактировалось Stilet; 31.05.2010 в 16:58.
Не_знаю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
криптография glupayastudentka Помощь студентам 3 25.06.2009 05:00
криптография glupayastudentka Помощь студентам 0 23.06.2009 21:48
Криптография helpme Помощь студентам 8 10.11.2007 14:43