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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2010, 14:19   #1
KanPu3
 
Регистрация: 15.06.2010
Сообщений: 3
По умолчанию Шифрование поточное

Шифр VMPC.
Из википедии:

Цитата:
Основа шифра - генератор псевдослучайных чисел, базой которого является односторонняя необратимая функция VMPC (англ. Variably Modified Permutation Composition):

for x from 0 do n-1: g(x) = VMPC(f(x)) = f(f(f(x))+1).

Ключевое расписание
c : Длина ключа в байтах (16 <= c <=64)

K : Ключ

z : Длина вектора инициализации в байтах (16 <= z <=64)

V : Вектор инициализации

m : 16-разрядная переменная

s : 8-разрядная глобальная переменная




1. s = 0
2. for i from 0 to 255: P[i]=i
3. for m from 0 to 767: выполняем пп. 4-6:
4. n = m and 255
5. s = P[ (s + P[n] + K[m mod c]) and 255 ]
6. Temp = P[n]
P[n] = P[s]
P[s] = Temp
7. for m from 0 to 767: выполняем пп. 8-10:
8. n = m and 255
9. s = P[ (s + P[n] + V[m mod z]) and 255 ]
10. Temp = P[n]
P[n] = P[s]
P[s] = Temp

Зашифрование и расшифрование
Для генерации Len байт выходного ключевого потока выполняем следующие операции:

1. n = 0
2. Повторяем пп. 3-6 Len раз:
3. s = P[ (s + P[n]) and 255 ]
4. Output = P[ (P[P[s]]+1) and 255 ]
5. Temp = P[n]
P[n] = P[s]
P[s] = Temp
6. n = (n + 1) and 255

Кто может объяснить а как это будет на Delphi по-человечьи?
Спасибо, если кто обратит внимание.

http://fotki.yandex.ru/users/kanpu32...166556/?page=0
Так выглядит подобный алгоритм.

Последний раз редактировалось KanPu3; 15.06.2010 в 14:27. Причина: не дописал...
KanPu3 вне форума Ответить с цитированием
Старый 15.06.2010, 18:19   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Цитата:
Кто может объяснить а как это будет на Delphi по-человечьи?
А что не понятно? Практически готовый код...
p51x вне форума Ответить с цитированием
Старый 15.06.2010, 18:33   #3
KanPu3
 
Регистрация: 15.06.2010
Сообщений: 3
По умолчанию

Я просто не понимаю что это означает(
Очень прошу,объяснить.Или лучше написать,можно за вознаграждение.
KanPu3 вне форума Ответить с цитированием
Старый 16.06.2010, 00:26   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Цитата:
Я просто не понимаю что это означает(
Что именно вы не понимаете?

Цитата:
for x from 0 to n-1
практически готовый оператор паскаля:
Код:
for x:=0 to n-1 do
p51x вне форума Ответить с цитированием
Старый 16.06.2010, 11:13   #5
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

ЧТо-то ты невнимательно читал вики..

Цитата:
Блочные криптосистемы разбивают текст сообщения на отдельные блоки и затем осуществляют преобразование этих блоков с использованием ключа.

Основная идея
Блочный шифр состоит из двух взаимосвязанных алгоритмов: алгоритм шифрования E и алгоритм расшифрования E-1. Входными данными служат блок размером n бит и k-битный ключ. На выходе получается n-битный зашифрованный блок
Это к вопросу, "что это означает", т.е. основная идея. Просто берут сообщение, разбивают на блоки и каждый блок "перепутывают".

В конце этой статьи и википедии есть ссылка для скачивания готового алгоритма на С. А уж из С в Делфи перевести на раз плюнуть. Хочешь, выкладывай код С, помогу переделать в Делфи
Snejnaya вне форума Ответить с цитированием
Старый 17.06.2010, 07:09   #6
KanPu3
 
Регистрация: 15.06.2010
Сообщений: 3
По умолчанию

Касательно этого шифра-он не блочный, а потоковый.

А код вот)Спасибо, если поможете.

/*

VMPC stream cipher.

Ported to ISO C by Alexander Myasnikov.

Web: www.darksoftware.narod.ru


*/

typedef unsigned char u8;

u8 n = 0;
u8 P[256];
u8 s = 0;


void __stdcall __export
setup (u8 * key, u8 * iv)
{
long m, i;
u8 temp;
s = 0;

for (i = 0; i != 256; i++)
{
P[i] = (u8) i;
}

for (m = 0; m != 768; m++)
{
s = 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 = 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;
}

void __stdcall __export
crypt (u8 * input, u8 * output, long len)
{
long i;
u8 z, temp;
for (i = 0; i != len; i++)
{
s = 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 = (u8) ((n + 1) & 0xff);
output[i] = (u8) (input[i] ^ z);
}
}
KanPu3 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование на С Jasper92 Общие вопросы C/C++ 1 23.12.2009 10:05
Шифрование Sina Помощь студентам 0 15.12.2009 21:31
Шифрование SnowSin Помощь студентам 0 13.12.2009 12:14
шифрование Рахимжан Помощь студентам 5 29.11.2009 22:33
шифрование Stanislav Свободное общение 10 04.03.2008 05:09