Алгоритмы

Главная
Понятие алгоритма
Больше про алгоритмы
Анализ
Теория алгоритмов
Основные конструкции
Сортировка
Математика
Геометрия
Комбинаторика
Сжатие и кодирование
Сжатие изображений
Шифрование
Исходники

Статьи

Что такое информация
Искусственный интеллект
Чего не может компьютер
Модемы
История архитектуры ПК
CD-ROM


Алгоритм RC5 это новый блочный шифр, разработанный Роном Ривестом для RSA laboratories. В этом алгоритме переменными являются:

  • Длина блока.
  • Количество циклов (итераций).
  • Длина ключа.

В блочном алгоритме RC5 размер слова определяет однозначно размер блока - размер блока в два раза больше размера слова. Например, задан размер слова в 32 бита - размер блока в этом случае будет 64 бита. Для лучшего результата (наверно имеется ввиду скорость работы) советуют выбирать размер слова равным разрядности регистров процессора, на котором реализуется алгоритм. В этой страничке будут изпользованы следущие обозначения:

W - Это размер слова в алгоритме RC5 в битах.Как 
отмечалось ранее - 
                     это половина от размера блока. 

WW - Это размер слова в байтах.

B - Это размер блока в битах.

BB - Это размер блока в байтах: BB = B/ 8.

b - Это длина в байтах секретного ключа.  0 <= b< 256.

K - Это секретный ключ, который определяется последовательностью
                   байтов: K[0], ..., K[b-1].

R - Это число циклов (итераций) во внутренних преобразованиях 
алгоритма
                RC5.        0 <= R < 256.

T - Это число слов в расширенной таблице ключей. Оно всегда равно
                   2*(R + 1).  1 < T < 513.

S - Это расширенная таблица ключей, состоящая из 
последовательности:
                  S[0], ..., S[T-1].

N - Это число байтов в тексте сообщения.

P - Это сообщение, состояшее из последовательности байтов: 
                  P[0], ..., P[N-1].

C - Это шифровка, состоящая из последовательности байтов: 
                  C[0], C[1], ...

I - Это начальный вектор для алгоритма CBC, который состоит из 
последовательности 
                   байтов: I[0], ..., I[BB-1].

1 Описание ключа RC5

Как и большая часть блочных шифров, алгоритм RC5, расширяет небольшой ключ, введенный пользователем, в таблицу внутренних ключей.Длина пользовательского ключа является одним из параметров алгоритма.Пример структуры для ключа на языке С:

typedef struct rc5UserKey
  {
    int                       keyLength; /* длина в байтах. */
    unsigned char   *keyBytes;  /*  символы ключа */
  } rc5UserKey;

Основные операции с типом rc5UserKey - это:

  • Создание ключа
  • Уничтожение
  • и установка ключа

1.1 Создание объекта rc5UserKey

Создание ключа крайне просто: выделение памяти для ключа и очистка этой памяти. Например так:

rc5UserKey *RC5_Key_Create ()
  {
    rc5UserKey *pKey;

    pKey = new rc5UserKey; 
    if (pKey != ((rc5UserKey *) 0))
    {
        pKey->keyLength = 0;
        pKey->keyBytes = (unsigned char *) 0;
    }
    return (pKey);
  }

1.2 Уничтожение объекта rc5UserKey

Удаление ключа тоже просто: очищается память и освобождается, причем сначала надо очистить память, а потом освободить ее:

void RC5_Key_Destroy (rc5UserKey *pKey)
{
    unsigned char   *to;
    int           count;

    if (pKey == ((rc5UserKey *) 0))
        return;
    if (pKey->keyBytes == ((unsigned char *) 0))
        return;
    to = pKey->keyBytes;
    for (count = 0; count < pKey->keyLength; count++)
        to[count] = (unsigned char) 0;
    delete (pKey->keyBytes);
    pKey->keyBytes = (unsigned char *) 0;
    pKey->keyLength = 0;
    delete (pKey);
}

1.3 Установка ключа

В этой операции происходит копирование ключа из массива символов в объект rc5UserKey. В случае неудачи функция возвращает 0:

int RC5_Key_Set (rc5UserKey *pKey,int keyLength,unsigned char *keyBytes)
{
    unsigned char   *keyBytesCopy;
    unsigned char   *from, *to;
    int          count;

    keyBytesCopy = (unsigned char *) malloc (keyLength);
    if (keyBytesCopy == ((unsigned char *) 0))
        return (0);
    from = keyBytes;
    to = keyBytesCopy;
    for (count = 0 ; count < keyLength ; count++)
        to[count] = from[count];
    pKey->keyLength = count;
    pKey->keyBytes = keyBytesCopy;
    return (1);
  }
 

Для описания расширения ключа понадобятся некоторые определения,макросы:

  /*  Определения для алгоритма RC5 как для 64-битного блочного шифра. */
  /* "unsigned int" = 32 бита */
  #define RC5_WORD     unsigned int
  #define W                     (32)
  #define WW                 (W / 8)
  #define ROT_MASK     (W - 1)

Назад

   
Видел главный бизнес для деловых людей. . Программа daemon скачать бесплатно. Русификация программ.

© algoritmy.info 2007-2010