コード例 #1
0
        /// <summary>
        /// Шифрует параметры запуска для программ "Центра запуска"
        /// </summary>
        /// <param name="InString"></param>
        /// <returns></returns>
        public static string Encrypt(string InString) // шифрование
        {
            CriptHelper.Reset();                      //SetCryptKeys;
            string res = "";
            uint   sum = 0;

            foreach (var c in InString)
            {
                var b1 = (byte)c;
                var b2 = (byte)(CriptHelper.StartKeyDD >> 8);
                var c1 = (char)(b1 ^ b2);
                res += c1;
                CriptHelper.StartKeyDD = ((byte)c1 + CriptHelper.StartKeyDD) * CriptHelper.MultKeyHH + CriptHelper.AddKeyMM;
                sum += (byte)c1;                   // подсчёт КС
            }

            return(CriptHelper.Str2Asc((char)((byte)sum) + res));            // добавляем в начало младший байт КС
        }
コード例 #2
0
        /// <summary>
        /// Дешифрует параметры запуска, полученные из "Центра запуска"
        /// </summary>
        /// <param name="InString"></param>
        /// <returns></returns>
        public static bool Decrypt(ref string InString)         // дешифрование
        {
            CriptHelper.Reset();
            var MM = CriptHelper.AddKeyMM;

            do
            {             // цикл для текущей и предыдущей минуты
                string OutS = "";
                ushort sum  = 0;
                var    InS  = InString;
                try
                {
                    var  sb    = InS.Substring(0, 3);
                    byte LoSum = byte.Parse(sb);
                    InS = InS.Remove(0, 3);                     // вырезаем младший байт КС результата
                    InS = CriptHelper.Asc2Str(InS);
                    foreach (var c in InS)
                    {
                        var b1 = (byte)c;
                        var b2 = (byte)(CriptHelper.StartKeyDD >> 8);
                        var cc = (char)(b1 ^ b2);
                        OutS += cc;
                        CriptHelper.StartKeyDD = ((byte)c + CriptHelper.StartKeyDD) * CriptHelper.MultKeyHH + CriptHelper.AddKeyMM;
                        sum += (byte)c;                           // подсчёт КС
                    }
                    InString = OutS;

                    if (((byte)sum) == (byte)LoSum)             // проверка конторльной суммы!
                    {
                        return(true);                           // выход при успешном дешифровании
                    }
                }
                catch
                {
                }

                CriptHelper.AddKeyMM--;                 // попробуем предыдущую минуту
            }while ((MM - CriptHelper.AddKeyMM) < 2);
            InString = "";
            return(false);            // выход при неудаче
        }