Поиск:

Ответ в темуСоздание новой темы Создание опроса
> потокове шифрование rc4, собственно применение алгоритма 
:(
    Опции темы
XeDuH
  Дата 28.5.2004, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Классик



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 16.5.2004
Где: Россия Москва

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



Подскажите пример алгоритма, и если не трудно дайте ссылоку на эту тему smile.gif

Зарание спасибо.
PM MAIL ICQ   Вверх
Albinos_x
Дата 29.5.2004, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Введи на yndex.ru криптоалгоритм RC4.
Если не ошибаюсь, то самая первая ссылка которую он выдаст будет с примером реализации алгоритма


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 4.6.2004, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Приведу код на Си

по нему алгоритм будет проще понять:

#include <stdio.h>

#define buf_size 1024

typedef struct rc4_key
{
unsigned char state[256];
unsigned char x;
unsigned char y;
} rc4_key;

#define swap_byte(x,y) t = *(x); *(x) = *(y); *(y) = t

void prepare_key(unsigned char *key_data_ptr, int key_data_len, rc4_key *key)
{
int i;
unsigned char t;
unsigned char swapByte;
unsigned char index1;
unsigned char index2;
unsigned char* state;
short counter;

state = &key->state[0];
for(counter = 0; counter < 256; counter++)
state[counter] = counter;
key->x = 0;
key->y = 0;
index1 = 0;
index2 = 0;
for(counter = 0; counter < 256; counter++)
{
index2 = (key_data_ptr[index1] + state[counter] + index2) % 256;
swap_byte(&state[counter], &state[index2]);
index1 = (index1 + 1) % key_data_len;
}
}

void rc4(unsigned char *buffer_ptr, int buffer_len, rc4_key *key)
{
unsigned char t;
unsigned char x;
unsigned char y;
unsigned char* state;
unsigned char xorIndex;
short counter;

x = key->x;
y = key->y;
state = &key->state[0];
for(counter = 0; counter < buffer_len; counter++)
{
x = (x + 1) % 256;
y = (state[x] + y) % 256;
swap_byte(&state[x], &state[y]);
xorIndex = (state[x] + state[y]) % 256;
buffer_ptr[counter] ^= state[xorIndex];
}
key->x = x;
key->y = y;
}

int main(int argc, char* argv[])
{
char seed[256];
char data[512];
char buf[buf_size];
char digit[5];
int hex, rd,i;
int n;
rc4_key key;

if (argc < 2)
{
fprintf(stderr,"%s key <in >out\n",argv[0]);
exit(1);
}
strcpy(data,argv[1]);
n = strlen(data);
if (n&1)
{
strcat(data,"0");
n++;
}
n/=2;
strcpy(digit,"AA");
for (i=0;i<n;i++)
{
digit[2] = data[i*2];
digit[3] = data[i*2+1];
sscanf(digit,"%x",&hex);
seed[i] = hex;
}

prepare_key(seed,n,&key);
rd = fread(buf,1,buf_size,stdin);
while (rd>0)
{
rc4(buf,rd,&key);
fwrite(buf,1,rd,stdout);
rd = fread(buf,1,buf_size,stdin);
}
}





--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Guest
Дата 13.9.2004, 05:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Albinos_x @ 4.6.2004, 19:57)

for(counter = 0; counter < buffer_len; counter++)
{
x = (x + 1) % 256;
y = (state[x] + y) % 256;
swap_byte(&state[x], &state[y]);
xorIndex = (state[x] + state[y]) % 256;
buffer_ptr[counter] ^= state[xorIndex];
}
key->x = x;
key->y = y;


Кто-нидь объясните на [email protected] зачем нужно каждый раз запускать при шифровании этот цикл(для потоков ограниченных каким то пределом допустим 256 байт)
Когда можно получить все первые 256 элементов для xor и в дальнейшем только ксорить без всяких перестановок и перебросок в ключевом массиве или я не понимаю чего-то?
Дайте ссылки на тестовые данные для RC4 с подробным разбором вычислений и итераций, у меня тесты не проходят - хотя алгоритм с точностью до буковки скатан
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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