예제 #1
0
        //Используется для генерации Кода (Handlers.Service.API10.ApiRequest.ashx)
        internal async Task <string> KeyGen(int DirCustomersID)
        {
            //DirCustomersID и Login
            //  X1 + "Левые символы" + Y1 + Закодирован DirCustomersID + Левые символы + Закодирован DirCustomersID + Левые символы
            //   1          8           1              X                      12                     X                     15

            //где X1 - сдвиг от 1 - 10
            //где Y1 - К-во символов в "DirCustomersID"

            string sKey = "";

            //1. X1 - Random(1, 10) (сдвиг от 1 - 10)
            Random random = new Random();
            int    X1     = random.Next(1, 9);

            //1. Левые символы - 1
            PartionnyAccount.Classes.Function.RandomSymbol randomSymbol1 = new PartionnyAccount.Classes.Function.RandomSymbol();
            string sSymbol1 = randomSymbol1.ReturnRandom(8);

            //2. Кодируем "DirCustomersID"
            //Получаем "DirCustomersID"
            //int DirCustomersID = var.VerifyUser_MSSQL_ID(pUsersID); //!!!
            //Колируем "DirCustomersID"
            PartionnyAccount.Classes.Function.RandomSymbol randomSymbol2 = new PartionnyAccount.Classes.Function.RandomSymbol();
            string sDirCustomersID = randomSymbol2.ReturnInteger_Code(DirCustomersID.ToString(), X1);
            //Y1 - К-во символов в "DirCustomersID"
            int Y1 = sDirCustomersID.ToString().Length;

            //3. Левые символы - 2
            PartionnyAccount.Classes.Function.RandomSymbol randomSymbol3 = new PartionnyAccount.Classes.Function.RandomSymbol();
            string sSymbol2 = randomSymbol3.ReturnRandom(12);

            //4. Кодируем "DirCustomersID"
            //PartionnyAccount.Classes.Function.RandomSymbol randomSymbol4 = new PartionnyAccount.Classes.Function.RandomSymbol();
            //string sLogin = randomSymbol4.ReturnInteger(pUsersID, X1);

            //5. Левые символы - 3
            PartionnyAccount.Classes.Function.RandomSymbol randomSymbol5 = new PartionnyAccount.Classes.Function.RandomSymbol();
            string sSymbol3 = randomSymbol5.ReturnRandom(15);

            //n. Клеим символы
            sKey = X1 + sSymbol1 + Y1 + sDirCustomersID + sSymbol2 + sDirCustomersID + sSymbol3;



            PartionnyAccount.Classes.Crypto.AES aES = new Classes.Crypto.AES();
            sKey = aES.EncryptStringAES(sKey, aES.password);



            return(sKey);
        }
예제 #2
0
        internal async Task <bool> KeyGen_Verify(string Key) //, int DirCustomersID
        {
            string
                sKey  = Key,
                sKey2 = Key;



            //Расскодируем "AES"
            PartionnyAccount.Classes.Crypto.AES aES = new Classes.Crypto.AES();
            Key = sKey = aES.DecryptStringAES(sKey, aES.password);



            // === === === === === === === === === === === === === === === === === === ===

            //1. Получаем 2-а "DirCustomersID"
            //2. Проверяем равны ли они (нет - исключение: Key не правильный, у Вас осталось 7 попыток.)
            //3. Ищем в БД (MS SQL) "DirCustomersID" и получаем pUsers (Login) (не находим - исключение: Key не правильный, у Вас осталось 7 попыток.)
            //4. Проверяем в БД (SQLite) клиента Key
            //   - Совпадает - получаем дополнительные
            //   - не совпадает - исключение: Key не правильный, у Вас осталось 7 попыток.


            //Создаём копию "Key"
            //string sKey = Key;



            #region 1. Получаем 2-а "DirCustomersID"


            #region 1.1. Получаем X1 - сдвиг от 1 - 10 === === ===
            string sX1 = Key[0].ToString();

            int  X1;
            bool bX1 = Int32.TryParse(sX1, out X1);
            if (!bX1)
            {
                throw new System.InvalidOperationException(PartionnyAccount.Classes.Language.Sklad.Language.msg93);
            }
            #endregion


            #region 1.3. Получаем Y1 - К-во символов в "DirCustomersID-1" === === ===
            Key = Key.Remove(0, 9);

            string sY1 = Key[0].ToString();

            int  Y1;
            bool bY1 = Int32.TryParse(sY1, out Y1);
            if (!bY1)
            {
                throw new System.InvalidOperationException(PartionnyAccount.Classes.Language.Sklad.Language.msg93);
            }

            //Удаляем Y1
            Key = Key.Remove(0, 1);

            //Считываем Y1 символов - это и будет первый "DirCustomersID"
            string sDirCustomersID1 = "";
            for (int i = 0; i < Y1; i++)
            {
                sDirCustomersID1 += Key[i].ToString();
            }

            /*
             * int DirCustomersID1;
             * bool bDirCustomersID1 = Int32.TryParse(sDirCustomersID1, out DirCustomersID1);
             * if (!bDirCustomersID1) throw new System.InvalidOperationException(PartionnyAccount.Classes.Language.Sklad.Language.msg93);
             */
            #endregion


            #region 1.3. Получаем 2-й "DirCustomersID"
            Key = Key.Remove(0, Y1 + 12);

            /*
             * Y1 - уже нашли
             * string sY1 = Key[0].ToString();
             *
             * int Y1;
             * bool bY1 = Int32.TryParse(sY1, out Y1);
             * if (!bY1) throw new System.InvalidOperationException(PartionnyAccount.Classes.Language.Sklad.Language.msg93);
             */

            //Удаляем Y1
            //Key = Key.Remove(0, 1);

            //Считываем Y1 символов - это и будет первый "DirCustomersID"
            string sDirCustomersID2 = "";
            for (int i = 0; i < Y1; i++)
            {
                sDirCustomersID2 += Key[i].ToString();
            }

            /*
             * int DirCustomersID2;
             * bool bDirCustomersID2 = Int32.TryParse(sDirCustomersID2, out DirCustomersID2);
             * if (!bDirCustomersID2) throw new System.InvalidOperationException(PartionnyAccount.Classes.Language.Sklad.Language.msg93);
             */
            #endregion


            #endregion


            #region 2. Проверяем равны ли они (нет - исключение: Key не правильный, у Вас осталось 7 попыток.)

            if (sDirCustomersID1 != sDirCustomersID2)
            {
                throw new System.InvalidOperationException(PartionnyAccount.Classes.Language.Sklad.Language.msg93);
            }

            #endregion


            #region Декодируем "DirCustomersID"

            //Колируем "DirCustomersID"
            PartionnyAccount.Classes.Function.RandomSymbol randomSymbol2 = new PartionnyAccount.Classes.Function.RandomSymbol();
            //int iDirCustomersID = 0;
            try { iDirCustomersID = Convert.ToInt32(randomSymbol2.ReturnInteger_Decode(sDirCustomersID1, X1)); } catch { throw new System.InvalidOperationException(PartionnyAccount.Classes.Language.Sklad.Language.msg93); }

            #endregion


            #region 3. Ищем в БД (MS SQL) "DirCustomersID" и получаем pUsers (Login) (не находим - исключение: Key не правильный, у Вас осталось 7 попыток.)

            string pUsersID = connectionString.mDLogin(iDirCustomersID); // _var.VerifyUser_MSSQL_Login(iDirCustomersID);
            //Не нашло или клиент не активный
            if (String.IsNullOrEmpty(pUsersID))
            {
                throw new System.InvalidOperationException(PartionnyAccount.Classes.Language.Sklad.Language.msg93);
            }

            #endregion


            #region 4. Проверяем в БД (SQLite) клиента Key

            db = new DbConnectionSklad(connectionString.Return(iDirCustomersID, null, true));

            var query = await Task.Run(() =>
                                       (

                                           from x in db.API10s

                                           where x.API10Key == sKey2

                                           select x

                                       ).ToListAsync());

            if (query.Count() > 0)
            {
                if (query[0].API10Key == sKey2)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }

            #endregion
        }