Changeset 5948


Ignore:
Timestamp:
Apr 8, 2014, 8:34:09 PM (8 years ago)
Author:
krauss
Message:

Scytale: Bug in calculation of CharsPerRow

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/Scytale/Scytale.cs

    r5761 r5948  
    2828    {
    2929        private readonly ScytaleSettings settings;
    30         private int CharsPerRow;
    3130
    3231        public event PropertyChangedEventHandler PropertyChanged;
     
    109108                inputString = inputString.Replace("\r", "").Replace("\n","");
    110109
    111                 CharsPerRow = inputString.Length / settings.StickSize + 1;
    112                 outputString = string.Empty;
     110                Progress(0,1);
     111               
    113112                switch (settings.Action)
    114113                {
    115114                    case 0:
    116                         EncryptIt();
     115                        OutputString = Encrypt(inputString, settings.StickSize);
    117116                        break;
    118117                    case 1:
    119                         DecryptIt();
     118                        OutputString = Decrypt(inputString, settings.StickSize);
    120119                        break;
    121120                    default:
    122121                        break;
     122                }
    123123
    124                 }
    125                 OnPropertyChanged("OutputString");
     124                Progress(1,1);
    126125            }
    127126        }
    128127
    129         private void DecryptIt()
     128        private string Decrypt(string s, int size)
    130129        {
    131             int Position = 0;
    132             for (int i = 0; i < inputString.Length - 1; i++)
    133             {
    134                 outputString += inputString[Position];
    135                 Position += settings.StickSize;
    136                 if (Position >= inputString.Length)
    137                     Position -= inputString.Length - 1;
     130            string result = "";
    138131
    139                 //show the progress
    140                 Progress(i, inputString.Length - 2);
    141             }
    142             outputString = outputString.Replace('_', ' ').Trim();
     132            for (int ofs = 0; ofs < size; ofs++)
     133                for (int i = ofs; i < s.Length; i += size)
     134                    result += s[i];
     135
     136            return result.Replace('_', ' ').Trim();
    143137        }
    144138
    145         private void EncryptIt()
     139        private string Encrypt(string s, int size)
    146140        {
    147             inputString = inputString.Replace(' ', '_');
    148             int Position = 0;
    149             int totalChars = settings.StickSize * CharsPerRow;
    150             for (int i = 0; i < totalChars; i++)
    151             {
    152                 if (Position > inputString.Length - 1)
    153                     outputString += "_";
    154                 else
    155                 {
    156                     outputString += inputString[Position];
    157                 }
    158                 Position += CharsPerRow;
    159                 if (Position >= settings.StickSize * CharsPerRow)
    160                     Position -= settings.StickSize * CharsPerRow - 1;
     141            string result = "";
    161142
    162                 //show the progress
    163                 Progress(i, totalChars - 1);
    164             }
     143            s = s.Replace('_', ' ');
     144
     145            int CharsPerRow = (s.Length + size - 1) / size;
     146            for (int ofs = 0; ofs < CharsPerRow; ofs++)
     147                for (int i = 0, j = ofs; i < size; i++, j += CharsPerRow)
     148                    result += (j < s.Length) ? s[j] : '_';
     149
     150            return result;
    165151        }
    166152
Note: See TracChangeset for help on using the changeset viewer.