/// <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)); // добавляем в начало младший байт КС }
/// <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); // выход при неудаче }