public GenericResult <string> Decrypt(string targetText, string keyText)
        {
            var genericResult = new GenericResult <string>();

            try
            {
                byte[] targetTextBytes = Convert.FromBase64String(targetText);
                byte[] targetKeyBytes  = Encoding.ASCII.GetBytes(keyText);
                fillEmptyBytes(ref targetKeyBytes);
                fillEmptyBytes(ref targetTextBytes);
                byte[] targetBlock = new byte[16];
                byte[] keyBlock    = new byte[16];
                Array.Copy(targetTextBytes, 0, targetBlock, 0, 16);
                Array.Copy(targetKeyBytes, 0, keyBlock, 0, 16);
                var initialKey = new byte[16];
                Array.Copy(keyBlock, initialKey, 16);
                var allRoundKeyList = getAllRoundKeyList(keyBlock);

                addRoundKey(ref targetBlock, allRoundKeyList[9]);
                shiftRows(ref targetBlock, Direction.Right);
                subsituteBytes(ref targetBlock, Constants.InverseSBox);

                for (int roundCounter = 8; roundCounter >= 0; roundCounter--)
                {
                    addRoundKey(ref targetBlock, allRoundKeyList[roundCounter]);
                    inverseMixColumn(ref targetBlock);
                    shiftRows(ref targetBlock, Direction.Right);
                    subsituteBytes(ref targetBlock, Constants.InverseSBox);
                }

                addRoundKey(ref targetBlock, initialKey);

                genericResult.ResultValue = Encoding.ASCII.GetString(targetBlock);
            }
            catch (Exception ex)
            {
                genericResult.Errors.Add(ex.ToString());
                return(genericResult);
            }


            return(genericResult);
        }
        public GenericResult <string> Encrypt(string targetText, string keyText)
        {
            var genericResult = new GenericResult <string>();

            try
            {
                byte[] targetTextBytes = Encoding.ASCII.GetBytes(targetText);
                byte[] targetKeyBytes  = Encoding.ASCII.GetBytes(keyText);
                fillEmptyBytes(ref targetKeyBytes);
                fillEmptyBytes(ref targetTextBytes);
                byte[] targetBlock = new byte[16];
                byte[] keyBlock    = new byte[16];
                Array.Copy(targetTextBytes, 0, targetBlock, 0, 16);
                Array.Copy(targetKeyBytes, 0, keyBlock, 0, 16);

                addRoundKey(ref targetBlock, keyBlock);
                for (int roundCounter = 0; roundCounter < 9; roundCounter++)
                {
                    subsituteBytes(ref targetBlock);
                    shiftRows(ref targetBlock, Direction.Left);
                    mixColumns(ref targetBlock);
                    getNextRoundKey(ref keyBlock, roundCounter);
                    addRoundKey(ref targetBlock, keyBlock);
                }

                subsituteBytes(ref targetBlock);
                shiftRows(ref targetBlock, Direction.Left);
                getNextRoundKey(ref keyBlock, 9);
                addRoundKey(ref targetBlock, keyBlock);
                genericResult.ResultValue = Convert.ToBase64String(targetBlock);
            }
            catch (Exception ex)
            {
                genericResult.Errors.Add(ex.ToString());
                return(genericResult);
            }
            return(genericResult);
        }