コード例 #1
0
        public ActionResult Login(string returnUrl)
        {
            string auth = GetCookie("Auth");

            if (!String.IsNullOrWhiteSpace(auth))
            {
                ApplicationDbContext dba = new ApplicationDbContext();
                AbzHash abzHash          = dba.AbzHashs.Find(auth);
                if ((abzHash != null) & (abzHash.IP == HttpContext.Request.UserHostAddress))
                {
                    string Email    = MyCrypto.DeShifrovka(abzHash.Email);
                    string Password = MyCrypto.DeShifrovka(abzHash.Password);

                    var result = SignInManager.PasswordSignIn(Email, Password, true, shouldLockout: false);

                    return(RedirectToLocal(returnUrl));
                }
            }

            //string Email = MyCrypto.DeShifrovka(GetCookie("MyAuth"));
            //string Password = MyCrypto.DeShifrovka(GetCookie("MyPWD"));

            //if (!String.IsNullOrWhiteSpace(Email) && !String.IsNullOrWhiteSpace(Password))
            //{
            //    //FormsAuthentication.SetAuthCookie(cuc, true);
            //    var result = SignInManager.PasswordSignIn(Email, Password, true, shouldLockout: false);
            //    return RedirectToLocal(returnUrl);
            //}

            ViewBag.ReturnUrl = returnUrl;
            return(View());
        }
コード例 #2
0
        public void HammingDistance_Test()
        {
            //https://trustedsignal.blogspot.com/2015/06/xord-play-normalized-hamming-distance.html
            string str             = "fuse fuel for falling flocks";
            string key             = "few";
            var    ExpectedResults = new Dictionary <int, double> {
                { 2, 2.88461538461538 },
                { 3, 2.54166666666667 },
                { 4, 3.08333333333333 },
                { 5, 2.65 },
                { 6, 2.44444444444444 },
                { 7, 2.80952380952381 },
                { 8, 2.8125 },
                { 9, 2.22222222222222 },
                { 10, 2.6 },
                { 11, 2.18181818181818 },
                { 12, 2.16666666666667 },
                { 13, 2.61538461538462 },
                { 14, 2.71428571428571 }
            };

            var bytes     = MyCrypto.SingleByteXOR_String(str, key);
            var ScoreList = Stats.GetHammingDistances(bytes.ToList(), 2, 14);

            for (int i = 2; i < 14; i++)
            {   //Assert within a rounded range b/c of doubles (close enough)
                Assert.That(Math.Abs(ScoreList[i] - ExpectedResults[i]), Is.LessThan(0.00001D));
            }
        }
コード例 #3
0
ファイル: Set2Tests.cs プロジェクト: JohnCongerCC/Crypto
        public void AESinCBC_Encrypt_Decrypt_Test()  //CBC = Cipher Block Chaining
        {
            int BLOCKSIZE = 16;

            string OriginalMessage = "Now I rock a house party at the drop of a hat\nAnd I beat a body down with an aluminum bat";
            var    bytes           = MyConvert.TextToByteArray(OriginalMessage);
            var    PaddedBytes     = Pad.AddPkcs7(bytes, 128); //Pad the message to 128 bytes

            //The Key (16 bytes)
            string key      = "YELLOW SUBMARINE";
            string HexKey   = MyConvert.HexEncodePlainText(key);
            var    Keybytes = MyConvert.HexToByteArray(HexKey);

            //Initialization Vector (padded to BLOCKSIZE bytes)
            string IVHex   = Pad.PadHex(BLOCKSIZE * 2, "00");
            var    IVBytes = MyConvert.HexToByteArray(IVHex);

            //Encrypt
            var CiperBytes = MyCrypto.AES_CBC_Encrypt(PaddedBytes, Keybytes, IVBytes, BLOCKSIZE);

            //Decrypt
            var PlainBytes    = MyCrypto.AES_CBC_Decrypt(CiperBytes, Keybytes, IVBytes, BLOCKSIZE);
            var UnPaddedBytes = Pad.RemovePkcs7(PlainBytes); //Unpad the message
            var hexPlain      = MyConvert.BytesToHex(UnPaddedBytes);
            var PlainText     = MyConvert.HexToAscii(hexPlain);

            Assert.IsTrue(OriginalMessage == PlainText);
        }
コード例 #4
0
ファイル: Set2Tests.cs プロジェクト: JohnCongerCC/Crypto
        public void Implement_CBC_mode_Test()  //CBC = Cipher Block Chaining
        {
            var BLOCKSIZE = 16;

            //https://cryptopals.com/sets/2/challenges/10
            string str   = Util.GetFile(10);
            string Hex   = MyConvert.Base64ToHex(str);
            var    bytes = MyConvert.HexToByteArray(Hex);

            //Initialization Vector (padded to BLOCKSIZE bytes)
            string IVHex   = Pad.PadHex(BLOCKSIZE * 2, "00");
            var    IVBytes = MyConvert.HexToByteArray(IVHex);

            //The Key
            string key      = "YELLOW SUBMARINE";
            string HexKey   = MyConvert.HexEncodePlainText(key);
            var    Keybytes = MyConvert.HexToByteArray(HexKey);

            //Perform my version of CBC
            var decryptedBytes = MyCrypto.AES_CBC_Decrypt(bytes, Keybytes, IVBytes, BLOCKSIZE);
            var HexResult      = MyConvert.BytesToHex(decryptedBytes);
            var Plain          = MyConvert.HexToAscii(HexResult);

            Assert.IsTrue("I'm back and I'm ringin' " == Plain.Substring(0, 25));  //25 is at least two blocks (of16) so i know i have the algo correct
        }
コード例 #5
0
ファイル: Set2Tests.cs プロジェクト: JohnCongerCC/Crypto
        public void AES_ECB_and_CBC_Oracle_Test()
        {
            //https://cryptopals.com/sets/2/challenges/11
            string myInput             = Util.GenerateIdenticalString('A', 100);
            bool   FoundAtLeastOne_ECB = false;
            bool   FoundAtLeastOne_CBC = false;

            for (int i = 0; i < 1000; i++)
            {
                var Result      = MyCrypto.RandomlyEncrypt(myInput);
                var MenthodUsed = MyCrypto.Encryption_Oracle(Result.EncryptedBytes);
                Assert.AreEqual(MenthodUsed, Result.EType);

                if (MenthodUsed == AESEncryptionType.ECB)
                {
                    FoundAtLeastOne_ECB = true;
                }

                if (MenthodUsed == AESEncryptionType.CBC)
                {
                    FoundAtLeastOne_CBC = true;
                }
            }

            Assert.IsTrue(FoundAtLeastOne_ECB);
            Assert.IsTrue(FoundAtLeastOne_CBC);
        }
コード例 #6
0
ファイル: Set2Tests.cs プロジェクト: JohnCongerCC/Crypto
        public void DeterminECBBlockSize_Test()
        {
            var ByteBlockSize = MyCrypto.DeterminECBBlockSize(MyCrypto.AES_ECB_Encrypt);

            Assert.IsTrue(ByteBlockSize == 16); //AES.Blocksize is 128 bits - Assert is in bytes (16 * 8 = 128)
            // dotnet core RijndaelManaged only works with a 128 bit blocksize, as documented here...
            //https://stackoverflow.com/questions/52699604/how-to-use-rijndael-algorithm-with-256-long-block-size-in-dotnet-core-2-1
        }
コード例 #7
0
        public void SingleByteXORCipher_Test()
        {
            //https://cryptopals.com/sets/1/challenges/3
            string HexCipher         = "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736";
            string HexOfChar         = MyCrypto.SingleByteXOR(HexCipher).Hex;
            string ExpectedHexOfChar = "58";

            Assert.IsTrue(HexOfChar == ExpectedHexOfChar);
        }
コード例 #8
0
        public void BreakRepeatingKeyXOR_Test()
        {
            //https://cryptopals.com/sets/1/challenges/6
            string str      = Util.GetFile(6);
            var    Expected = "Terminator X: Bring the noise";
            var    result   = MyCrypto.BreakRepeatingKeyXOR(str);

            Assert.IsTrue(Expected == result);
        }
コード例 #9
0
        private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
            pwd[3]                 = (byte)82;
            pwd[11]                = (byte)104;
            controller             = new ServiceController();
            controller.ServiceName = "CardRoute";
            try
            {
                ServiceStatus = controller.Status.ToString();
            }
            catch
            {
                ServiceStatus = "не найден";
                controller    = null;
            }

            SetLanguage(Lang.Russian);
            XmlDocument settings = new XmlDocument();

            try
            {
                settings.Load($"{System.AppDomain.CurrentDomain.BaseDirectory}CardRoute.xml");
                myCommon.timeout       = XmlClass.GetDataXml(settings, "Common/Timeout", null);
                myCommon.language      = XmlClass.GetDataXml(settings, "Common/Language", null);
                myCommon.protocol      = XmlClass.GetDataXml(settings, "Common/Protocol", null);
                myCommon.updateFinal   = XmlClass.GetAttribute(settings, "Common/CardUpdates", "FinalMinutes", "0", null);
                myCommon.updateArchive = XmlClass.GetAttribute(settings, "Common/CardUpdates", "ArchiveDays", "0", null);

                mySqlServer.serverName = XmlClass.GetDataXml(settings, "Database/server", null);
                mySqlServer.DbName     = XmlClass.GetDataXml(settings, "Database/name", null);
                mySqlServer.Uid        = XmlClass.GetDataXml(settings, "Database/uid", null);

                myCdp.CdpConsole    = XmlClass.GetDataXml(settings, "Cdp/Console", null);
                myCdp.CdpIniFolder  = XmlClass.GetDataXml(settings, "Cdp/IniFolder", null);
                myCdp.CdpDefaultIni = XmlClass.GetDataXml(settings, "Cdp/CdpIni", null);
                myCdp.CdpDefaultIn  = XmlClass.GetDataXml(settings, "Cdp/InFile", null);

                myPerso.Ip   = XmlClass.GetAttribute(settings, "HS", "Ip", "", null);
                myPerso.Port = XmlClass.GetAttribute(settings, "HS", "Port", "", null);
                myPerso.Log  = XmlClass.GetAttribute(settings, "HS", "Log", "", null);
                myPerso.Path = XmlClass.GetDataXml(settings, "HS/Application", null);

                //пароль последним, на случай ошибки
                mySqlServer.Pwd = Utils.AHex2String(MyCrypto.TripleDES_DecryptData(XmlClass.GetDataXml(settings, "Database/password", null), pwd, CipherMode.ECB, PaddingMode.Zeros));
            }
            catch
            { }
            tiCommon.DataContext    = myCommon;
            tiSqlServer.DataContext = mySqlServer;
            tiCdp.DataContext       = myCdp;
            tiPerso.DataContext     = myPerso;
            lStatus.Content         = $"Статус: {ServiceStatus}";

            tbPwd.Password = mySqlServer.Pwd;
        }
コード例 #10
0
        public void DetectSingleCharacterXOR_Test()
        {
            //https://cryptopals.com/sets/1/challenges/4
            string[] lines         = File.ReadAllLines(@"./4.txt", Encoding.UTF8);
            var      messageIndex  = MyCrypto.DetectSingleCharacterXOR(lines);
            var      ExpectedIndex = 170;
            var      ExpectedMsg   = "Now that the party is jumping\n";

            Assert.IsTrue(messageIndex.Index == ExpectedIndex);
            Assert.IsTrue(messageIndex.Message == ExpectedMsg);
        }
コード例 #11
0
        public void FixedXOR_Test1()
        {
            //https://cryptopals.com/sets/1/challenges/2

            string Encrypted     = "1c0111001f010100061a024b53535009181c"; //Encrypted Text
            string HexEncodedKey = "686974207468652062756c6c277320657965"; //hit the bull's eye
            string ResultOR      = MyCrypto.FixedXOR(Encrypted, HexEncodedKey);
            string Decrypted     = "746865206b696420646f6e277420706c6179"; //the kid don't play

            Assert.IsTrue(ResultOR == Decrypted);
        }
コード例 #12
0
        public void RepeatingXOR_Test()
        {
            //https://cryptopals.com/sets/1/challenges/5
            string PlainText1     = "Burning 'em, if you ain't quick and nimble";
            string PlainText2     = "I go crazy when I hear a cymbal";
            string key            = "ICE";
            string CipherText     = MyCrypto.RepeatingXOR(PlainText1 + '\n' + PlainText2, key);
            string ExpectedCipher = "0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f20430a652e2c652a3124333a653e2b2027630c692b20283165286326302e27282f";

            Assert.IsTrue(CipherText == ExpectedCipher);
        }
コード例 #13
0
        public void FixedXOR_Test2()
        {
            //https://cryptopals.com/sets/1/challenges/6
            string str          = Util.GetFile(6);
            string HextoDecrypt = MyConvert.Base64ToHex(str);
            var    Key          = "Terminator X: Bring the noise";
            var    HexKey       = Pad.PadKey(MyConvert.HexEncodePlainText(Key), HextoDecrypt.Length);
            var    DecryptedHex = MyCrypto.FixedXOR(HextoDecrypt, HexKey);
            var    Plain        = MyConvert.HexToAscii(DecryptedHex);

            Assert.IsTrue("I'm back and I'm ringin' " == Plain.Substring(0, 25));
        }
コード例 #14
0
        public void FixedOR_String_Long_Test()
        {
            //https://trustedsignal.blogspot.com/2015/06/xord-play-normalized-hamming-distance.html
            string str            = "fuse fuel for falling flocks";
            string key            = "few";
            var    ExpectedResult = new byte[] { 000, 016, 004, 003, 069, 017, 019, 000, 027, 070, 003, 024, 020, 069, 017, 007, 009, 027, 015, 011, 016, 070, 003, 027, 009, 006, 028, 021 };

            var Result = MyCrypto.SingleByteXOR_String(str, key);

            for (int i = 0; i < Result.Count(); i++)
            {
                Assert.AreEqual(Result[i], ExpectedResult[i]);
            }
        }
コード例 #15
0
        private void bSave_OnClick(object sender, RoutedEventArgs e)
        {
            int final = 0, archive = 0;

            Int32.TryParse(myCommon.updateFinal, out final);
            Int32.TryParse(myCommon.updateArchive, out archive);
            FileStream    fs = new FileStream($"{System.AppDomain.CurrentDomain.BaseDirectory}CardRoute.xml", FileMode.Create);
            XmlTextWriter w  = new XmlTextWriter(fs, Encoding.UTF8);

            w.Formatting = Formatting.Indented;
            w.WriteStartDocument();
            w.WriteStartElement("Settings");
            w.WriteStartElement("Common");
            w.WriteElementString("Timeout", $"{myCommon.timeout}");
            w.WriteElementString("Language", $"{myCommon.language}");
            w.WriteElementString("Protocol", $"{myCommon.protocol}");
            if (final > 0 || archive > 0)
            {
                w.WriteStartElement("CardUpdates");
                w.WriteAttributeString("FinalMinutes", $"{final}");
                w.WriteAttributeString("ArchiveDays", $"{archive}");
                w.WriteEndElement();
            }
            w.WriteEndElement();
            w.WriteStartElement("Database");
            w.WriteElementString("providerName", $"System.Data.SqlClient");
            w.WriteElementString("server", $"{mySqlServer.serverName}");
            w.WriteElementString("name", $"{mySqlServer.DbName}");
            w.WriteElementString("uid", $"{mySqlServer.Uid}");
            w.WriteElementString("password", MyCrypto.TripleDES_EncryptData(Utils.String2AHex(tbPwd.Password), pwd, CipherMode.ECB, PaddingMode.Zeros));
            w.WriteEndElement();
            w.WriteStartElement("Cdp");
            w.WriteElementString("Console", $"{myCdp.CdpConsole}");
            w.WriteElementString("IniFolder", $"{myCdp.CdpIniFolder}");
            w.WriteElementString("InFile", $"{myCdp.CdpDefaultIn}");
            w.WriteElementString("CdpIni", $"{myCdp.CdpDefaultIni}");
            w.WriteEndElement();
            w.WriteStartElement("HS");
            w.WriteAttributeString("Ip", $"{myPerso.Ip}");
            w.WriteAttributeString("Port", $"{myPerso.Port}");
            w.WriteAttributeString("Log", $"{myPerso.Log}");
            if (!String.IsNullOrEmpty(myPerso.Path))
            {
                w.WriteElementString("Application", $"{myPerso.Path}");
            }
            w.WriteEndElement();
            w.WriteEndElement();
            w.Flush();
            fs.Close();
        }
コード例 #16
0
        public async Task <ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            // Сбои при входе не приводят к блокированию учетной записи
            // Чтобы ошибки при вводе пароля инициировали блокирование учетной записи, замените на shouldLockout: true
            var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout : false);

            switch (result)
            {
            case SignInStatus.Success:
                //string cookieValue = MyCrypto.Shifrovka(model.Email);
                //SetCookie("MyAuth", cookieValue);
                //cookieValue = MyCrypto.Shifrovka(model.Password);
                //SetCookie("MyPWD", cookieValue);

                //Создание AbzHash. Хранение по новому  03.07.2019

                ApplicationDbContext db = new ApplicationDbContext();
                AbzHash abzHash         = new AbzHash();

                abzHash.AbzHashID = Guid.NewGuid().ToString();
                SetCookie("Auth", abzHash.AbzHashID);
                abzHash.Email           = MyCrypto.Shifrovka(model.Email);
                abzHash.Password        = MyCrypto.Shifrovka(model.Password);
                abzHash.TerminationDate = DateTime.Now.AddDays(2);
                string ip = HttpContext.Request.UserHostAddress;
                abzHash.IP = ip;
                db.AbzHashs.Add(abzHash);
                db.SaveChanges();
                return(RedirectToLocal(returnUrl));

            case SignInStatus.LockedOut:
                return(View("Lockout"));

            case SignInStatus.RequiresVerification:
                return(RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }));

            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Неудачная попытка входа.");
                return(View(model));
            }
        }
コード例 #17
0
        public void AESinECB_Test()  //ECB = Electronic Codebook
        {
            //https://cryptopals.com/sets/1/challenges/7
            string str   = Util.GetFile(7);
            string Hex   = MyConvert.Base64ToHex(str);
            var    bytes = MyConvert.HexToByteArray(Hex);

            string key      = "YELLOW SUBMARINE";
            string HexKey   = MyConvert.HexEncodePlainText(key);
            var    Keybytes = MyConvert.HexToByteArray(HexKey);

            var result    = MyCrypto.AES_ECB_Decrypt(bytes, Keybytes);
            var HexResult = MyConvert.BytesToHex(result);
            var Plain     = MyConvert.HexToAscii(HexResult);

            Assert.IsTrue("I'm back and I'm ringin' " == Plain.Substring(0, 25));
        }
コード例 #18
0
        public async Task <OrderView> GetNew(AbzHash abzHash, int invoice)
        //public async Task<Order> GetNew(AbzHash abzHash,int invoice)
        {
            Order order = new Order();

            order.CustId     = (int)abzHash.CustID;
            order.ContractId = abzHash.ContractID;
            order.email      = MyCrypto.DeShifrovka(abzHash.Email);
            order.insDate    = DateTime.Now;
            order.DateExec   = DateTime.Now.AddDays(1);
            order.Dat        = DateTime.Now.AddDays(1);
            order.AdresId    = 1;
            order.Invoice    = invoice;
            db.Orders.Add(order);
            await db.SaveChangesAsync();

            return(await GetChange(order.OrderId));

            //return order;
        }
コード例 #19
0
ファイル: Set2Tests.cs プロジェクト: JohnCongerCC/Crypto
        public void AESinECB_Encrypt_Decrypt_Test()  //ECB = Electronic Codebook
        {
            string OriginalMessage = "Now is the time for all good men to come to the aid of their country";
            var    bytes           = MyConvert.TextToByteArray(OriginalMessage);
            var    PaddedBytes     = Pad.AddPkcs7(bytes, 128); //Pad the message to 128 bytes

            //The Key (16 bytes)
            string key      = "YELLOW SUBMARINE";
            string HexKey   = MyConvert.HexEncodePlainText(key);
            var    Keybytes = MyConvert.HexToByteArray(HexKey);

            //Encrypt
            var CiperBytes = MyCrypto.AES_ECB_Encrypt(PaddedBytes, Keybytes);

            //Decrypt
            var PlainBytes    = MyCrypto.AES_ECB_Decrypt(CiperBytes, Keybytes);
            var UnPaddedBytes = Pad.RemovePkcs7(PlainBytes); //Unpad the message
            var hexPlain      = MyConvert.BytesToHex(UnPaddedBytes);
            var PlainText     = MyConvert.HexToAscii(hexPlain);

            Assert.IsTrue(OriginalMessage == PlainText);
        }
コード例 #20
0
 private void InitializeMyComponents()
 {
     crypto  = new MyCrypto();
     ioTools = new IOTools();
 }