Пример #1
0
Файл: RC5.cs Проект: BinGOI/Lab3
        //-----------Decrypte-----------

        private byte[] _Decrypte_ECB_OneBlock(byte[] block)
        {
            if (block.Length != BlockLength)
            {
                throw new Exception("Block isn't correct");
            }

            var worker = new BlockWorker(new Buffer(block), _keys._Key);

            return(worker.Decrypte().ToBytes());
        }
Пример #2
0
Файл: RC5.cs Проект: BinGOI/Lab3
        //-----------Encrypte----------

        private byte[] _Encrypte_ECB_OneBlock(byte[] block)
        {
            if (block.Length != BlockLength)
            {
                throw new Exception("Block isn't correct");
            }

            var worker = new BlockWorker(new Buffer(block), _keys._Key);//тут генеруєм масив підключів S

            return(worker.Encrypte().ToBytes());
        }
Пример #3
0
Файл: RC5.cs Проект: BinGOI/Lab3
        public byte[] Decrypte_RC5_CBC_Pad()
        {
            var prevBlock = new Buffer(_Decrypte_ECB_OneBlock(_keys.GetAndDeleteFirst()));

            var decryptedFile = new List <byte>(BlockLength * _keys.Count);

            foreach (var block in _keys)
            {
                var currentBlock = new Buffer(block);

                var worker = new BlockWorker(currentBlock, _keys._Key);

                decryptedFile.AddRange((prevBlock ^ worker.Decrypte()).ToBytes());

                prevBlock = currentBlock;
            }

            var lastByte = decryptedFile.Last();

            bool IsAdditiveBytes = true;

            if ((int)lastByte < decryptedFile.Count)
            {
                for (int i = decryptedFile.Count - (int)lastByte; i < decryptedFile.Count; ++i)
                {
                    if (lastByte != decryptedFile[i])
                    {
                        IsAdditiveBytes = false;

                        break;
                    }
                }
            }
            else
            {
                IsAdditiveBytes = false;
            }

            if (IsAdditiveBytes)
            {
                decryptedFile.RemoveRange(decryptedFile.Count - (int)lastByte, (int)lastByte);
            }

            return(decryptedFile.ToArray());
        }
Пример #4
0
Файл: RC5.cs Проект: BinGOI/Lab3
        public byte[] Encrypte_RC5_CBC_Pad()
        {
            var generator = new Lab3.Random(BlockLength / 4);    //ліст з типом int на розмір

            Buffer prevBlock = new Buffer(generator.GetBytes()); //перше значення це значення IV
            //Buffer prevBlock = new Buffer();//перше значення це значення IV

            var encryptedFile = new List <byte>(BlockLength * _keys.Count + 1);  //ліст який буде містити байти утвореного файлу

            encryptedFile.AddRange(_Encrypte_ECB_OneBlock(prevBlock.ToBytes())); //додаємо до вихідного файлу зашифрований блок

            foreach (var block in _keys)
            {
                var currentBlock = new Buffer(block);

                var worker = new BlockWorker(prevBlock ^ currentBlock, _keys._Key);//тут генеруєм масив підключів S

                prevBlock = worker.Encrypte();

                encryptedFile.AddRange(prevBlock.ToBytes());//додаємо до вихідного файлу зашифрований блок
            }

            return(encryptedFile.ToArray());
        }