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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2009, 18:23   #1
Satgoblin
Новичок
Джуниор
 
Регистрация: 05.07.2009
Сообщений: 4
По умолчанию Алгоритм VMPC

Задача: изучить и реализовать один из криптографических алгоритмов. Реализация на С# есть. По самому коду я не могу понять сам алгоритм.
Satgoblin вне форума Ответить с цитированием
Старый 05.07.2009, 18:25   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

а код хде?
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 05.07.2009, 18:39   #3
Satgoblin
Новичок
Джуниор
 
Регистрация: 05.07.2009
Сообщений: 4
По умолчанию

Я не разбираюсь в самой проге(там несколько страничек).Может отправить тебе на мыло всю?
Satgoblin вне форума Ответить с цитированием
Старый 05.07.2009, 19:34   #4
Satgoblin
Новичок
Джуниор
 
Регистрация: 05.07.2009
Сообщений: 4
По умолчанию

Код:
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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            char[] key = textBox2.Text.ToCharArray();
            char[] msg = textBox1.Text.ToCharArray();
            char[] iv = new char[64];
            char[] msg1 = textBox1.Text.ToCharArray();
            int i, t;
            vmpc v = new vmpc(key, iv);
            v.crypt(msg, msg1);
            for (i = 0; i < msg.Length; i++)
            {
                t = msg1[i];
                textBox3.Text = textBox3.Text + t.ToString() + " ";
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            char[] key = textBox5.Text.ToCharArray();
            char[] iv = new char[64];
            int i;
            vmpc v = new vmpc(key, iv);
            string[] temp = textBox6.Text.Split(' ');
            char[] msg = new char[temp.Length - 1];
            char[] msg1 = new char[temp.Length - 1];
            char t;
            int t1;
            for (i = 0; i < temp.Length - 1; i++)
            {
                t1 = Convert.ToInt16(temp[i]);
                msg[i] = Convert.ToChar(t1);
            }
            v.crypt(msg, msg1);
            for (i = 0; i < msg.Length; i++)
            {
                t = msg1[i];
                textBox4.Text = textBox4.Text + t.ToString();
            }
        }
    }
    public class vmpc
    {
        byte n = 0;
        char[] P = new char[256];
        byte s = 0;
        //инициализация ключа
        public vmpc(char[] key1, char[] iv)
        {
            long m, i,t;
            char temp;
            char[] key = new char[64];
            s = 0;
            if (key1.Length>64) t=64;else t=key1.Length;
            for (i = 0; i != 256; i++)
            {
                P[i] = Convert.ToChar(i);;
            }
            for (i = 0; i < key1.Length; i++)
                key[i] = key1[i];
            for (i = key1.Length; i < 64; i++)
                key[i] = ' ';
            for (m = 0; m != 768; m++)
            {
                s = Convert.ToByte(P[(s + P[m & 0xff] + key[m % 64]) & 0xff]);
                temp = P[m & 0xff];
                P[m & 0xff] = P[s & 0xff];
                P[s & 0xff] = temp;
            }
            for (m = 0; m < 768; m++)
            {
                s = Convert.ToByte(P[(s + P[m & 0xff] + iv[m % 64]) & 0xff]);
                temp = P[m & 0xff];
                P[m & 0xff] = P[s & 0xff];
                P[s & 0xff] = temp;
            }
            n = 0;
        }
//зашифровать или расшифровать
        public void crypt(char[] input, char[] output)
        {
            long i;
            char z, temp;
            for (i = 0; i != input.Length; i++)
            {
                s = Convert.ToByte(P[(s + P[n & 0xff]) & 0xff]);
                z = P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff];
                temp = P[n & 0xff];
                P[n & 0xff] = P[s & 0xff];
                P[s & 0xff] = temp;
                n = Convert.ToByte((n + 1) & 0xff);
                output[i] = (char)(input[i] ^ z);
            }
        }
    }
}

Последний раз редактировалось MaTBeu; 05.07.2009 в 21:35.
Satgoblin вне форума Ответить с цитированием
Старый 05.07.2009, 20:05   #5
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

ВООБЩЕ в на сколько помню исходник можно взять с сайта автора, полный SDK!
uberchel вне форума Ответить с цитированием
Старый 05.07.2009, 20:25   #6
Satgoblin
Новичок
Джуниор
 
Регистрация: 05.07.2009
Сообщений: 4
По умолчанию

Это рабочий код.Я не могу понять где и что как работает.
Satgoblin вне форума Ответить с цитированием
Старый 05.07.2009, 20:27   #7
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Это код )))), кусок кода и непонятно от куда , говорю скачайте SDK
uberchel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм?! Spartaner Фриланс 2 28.05.2009 03:22
алгоритм lucky Паскаль, Turbo Pascal, PascalABC.NET 4 07.05.2009 12:56
Алгоритм SunKnight Работа с сетью в Delphi 5 29.04.2008 15:24
Алгоритм Rifler Паскаль, Turbo Pascal, PascalABC.NET 3 30.03.2008 01:33