Esempio n. 1
0
File: RC5.cs Progetto: 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());
        }
Esempio n. 2
0
File: RC5.cs Progetto: 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());
        }