Интернет магазин китайских планшетных компьютеров



Компьютеры - RC6 - Реализация алгоритма RC6 на языке C#

14 июня 2011
Купить детское автокресло коляска cybexonlineshop.ru.

Оглавление:
1. RC6
2. Детали RC6
3. Шифрование и расшифрование
4. Реализация алгоритма RC6 на языке C#
5. Безопасность
6. Оценка аппаратных средств
7. Выполнение
8. Лицензирование



В данной реализации используется размер слова W = 64 бита, что соответствует размеру блока в 128 бит. Число раундов R = 16. Ключ K определяется пользователем самостоятельно.

using System;
using System.IO;
using System.Collections.Generic;
 
namespace RC6
{
    class RC6
    {
        // Константы для операций свига
        public const int W = 32;
        public const int R = 16;
 
        // Переменные для работы с файлами
        public Byte fileData;
        public uint fileLength;
 
        // Список расшифрованных / рашифрованных данных
        public List<Byte> resultData = new List<Byte>;
 
        // Крипто-ключ
        public UInt32 key = new UInt32;
 
        // Функция записи данных в файл
        public void WriteByteArrayToFile
        {
            try
            {
                FileStream fs = new FileStream;
                BinaryWriter bw = new BinaryWriter;
 
                for 
                    bw.Write;
 
                bw.Close;
                fs.Close;
            }
            catch 
            {
                // Опущено для реализации под различными типами проектов
            }
        }
 
        // Функция чтения данных из файла
        public Byte ReadByteArrayFromFile
        {   
            Byte buffer = null;
 
            try
            {
                FileStream fs = new FileStream;
                BinaryReader br = new BinaryReader;
 
                long numBytes = new FileInfo.Length;
                buffer = br.ReadBytesnumBytes);
 
                br.Close;
                fs.Close;
            }
            catch 
            {
                // Опущено для реализации под различными типами проектов
            }
 
            return buffer;
        }
 
        // Функция сдвига вправо
        public UInt32 RightShift
        {
            return  | ));
        }
 
        // Функция сдвига влево
        public UInt32 LeftShift
        {
            return  | ));
        }
 
        // Функция определения числа сдвигов
        public int OffsetAmount
        {
            int nLgw = W) / Math.Log);
 
            dwVar = dwVar << ;
            dwVar = dwVar >> ;
 
            return dwVar;
        }
 
        // Функция генерации ключа
        public void KeyGen
        {
            UInt32 P32 = 0xB7E15163;
            UInt32 Q32 = 0x9E3779B9;
            UInt32 i, A, B;
            UInt32 dwByteOne, dwByteTwo, dwByteThree, dwByteFour;
 
            dwByteOne = dwKey >> 24;
            dwByteTwo = dwKey >> 8;
            dwByteTwo = dwByteTwo & 0x0010;
            dwByteThree = dwKey << 8;
            dwByteThree = dwByteThree & 0x0100;
            dwByteFour = dwKey << 24;
 
            dwKey = dwByteOne | dwByteTwo | dwByteThree | dwByteFour;
 
            key = P32;
 
            for 
                key = key + Q32;
 
            i = A = B = 0;
 
            int v = 3 * Math.Max;
 
            for 
            {
                A = key = LeftShift);
                B = dwKey = LeftShift));
 
                i =  % ;
            }
        }
 
        // Функция преобразования массива UInt32 к списку байт
        public void ConvertFromUInt32ToByteArray
        {
            List<byte> results = new List<byte>;
 
            foreach 
            {
                byte converted = BitConverter.GetBytes;
                results.AddRange;
            }
 
            // Формирование списка зашифрованных / расшифрванных байт данных
            resultData.AddRange;
        }
 
        // Функия преобразования массива байт в массив UInt32
        public UInt32 ConvertFromByteArrayToUIn32
        {
            List<UInt32> results = new List<UInt32>;
            // Размер блока конвертируемых данных. Читаем по 16 байт.
            int length = position + 16;                 
 
            for 
            {
                byte temp = new byte;
 
                for 
                {
                    if 
                        temp = array;
                    else
                        temp = 0x00;         // заполняем недостающие блоки в случае достижения
                                                // конца файла
                }
 
                results.Add);
            }
 
            return results.ToArray;
        }
 
        // Функция расшифровки файла
        public void DecodeFile
        {
            UInt32 pdwTemp;
 
            for 
            {
                pdwTemp = ConvertFromByteArrayToUIn32;
 
                pdwTemp = ;
                pdwTemp = ;
 
                for 
                {
                    UInt32 t = LeftShift),
                                        OffsetAmountW) / Math.Log)));
                    UInt32 u = LeftShift),
                                        OffsetAmountW) / Math.Log)));
 
                    pdwTemp = u)) + key);
                    pdwTemp = t)) + key);
 
                    UInt32 temp = pdwTemp;
                    pdwTemp = pdwTemp;
                    pdwTemp = pdwTemp;
                    pdwTemp = pdwTemp;
                    pdwTemp = temp;
                }
 
                pdwTemp = ;
                pdwTemp = ;
 
                // Конвертируем в выходной массив расшифрованных данных
                ConvertFromUInt32ToByteArray;
            }
 
            pdwTemp = null;
        }
 
        // Функция шифрования файла
        public void EncodeFile
        {
            UInt32 pdwTemp;
 
            for 
            {
                pdwTemp = ConvertFromByteArrayToUIn32;
 
                pdwTemp = ;
                pdwTemp = ;
 
                for 
                {
                    UInt32 temp = pdwTemp;
                    pdwTemp = pdwTemp;
                    pdwTemp = pdwTemp;
                    pdwTemp = pdwTemp;
                    pdwTemp = temp;
 
                    UInt32 t = LeftShift),
                                        OffsetAmountW) / Math.Log)));
                    UInt32 u = LeftShift),
                                        OffsetAmountW) / Math.Log)));
 
                    pdwTemp = , OffsetAmountu))) ^ t;
                    pdwTemp = , OffsetAmountt))) ^ u;
                }
 
                pdwTemp = ;
                pdwTemp = ;
 
                // Конвертируем в выходной массив зашифрованных данных
                ConvertFromUInt32ToByteArray;
            }
 
            pdwTemp = null;
        }
    }
}


Просмотров: 10170


<<< RC5
ROT13 >>>