Exemplo n.º 1
0
        public void TestAnotherChunkedDataIncrementalHash()
        {
            string temp, ActualString, ExpectedString;
            Int32  x, size, i;

            for (x = 0; x < TestConstants.chunkSize.Length / sizeof(Int32); x++)
            {
                size = TestConstants.chunkSize[x];

                foreach (var Idx in WorkingIndex)
                {
                    GetWorkingValue(Idx);
                    crcObj.Initialize();

                    i = size;
                    while (i < TestConstants.ChunkedData.Length)
                    {
                        temp = TestConstants.ChunkedData.Substring(i - size, size);
                        crcObj.TransformString(temp, Encoding.UTF8);

                        i += size;
                    } // end while

                    temp = TestConstants.ChunkedData.Substring((i - size));
                    crcObj.TransformString(temp, Encoding.UTF8);

                    ActualString = crcObj.TransformFinal().ToString();

                    ExpectedString = crcObj.ComputeString(TestConstants.ChunkedData, Encoding.UTF8)
                                     .ToString();

                    Assert.AreEqual(ExpectedString, ActualString);
                } // end for
            }     // end for
        }
Exemplo n.º 2
0
        public void StringTest()
        {
            IHash      hash       = HashFactory.Crypto.SHA3.CreateKeccak();
            HashResult hashResult = hash.ComputeString("This is a message!");

            Assert.True(hashResult.GetBytes().Length == 64);
        }
Exemplo n.º 3
0
        public static string GetHash(string str)
        {
            IHash      hash = Hash;
            HashResult res  = hash.ComputeString(str);

            return(GetString(res.GetBytes()));
        }
Exemplo n.º 4
0
        public async Task <AuthenticationTicket> GetRootAuthenticateTicketAsync(string username, string password)
        {
            var user = await _dbContext.Set <CcUiAuthen>().AsNoTracking().FirstOrDefaultAsync(p => p.Login == username);

            if (user == null)
            {
                return(null);
            }

            IHash      hash            = HashFactory.Crypto.CreateWhirlpool();
            HashResult r               = hash.ComputeString(password, Encoding.ASCII);
            string     passwordEncoded = Regex.Replace(r.ToString(), "-", string.Empty).ToLower();

            if (user.PwdEncoded != passwordEncoded)
            {
                return(null);
            }
            var identity = new ClaimsIdentity();

            identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.Userid.ToString()));
            identity.AddClaim(new Claim(ClaimTypes.Role, "Administrator"));
            var principal = new ClaimsPrincipal(identity);
            var prop      = new AuthenticationProperties()
            {
                IssuedUtc  = DateTime.UtcNow,
                ExpiresUtc = DateTime.UtcNow.AddDays(1)
            };

            return(new AuthenticationTicket(principal, prop, "application"));
        }
Exemplo n.º 5
0
 public static void MultithreadComputeHash(ref string result, IHash hash, Int32 iterations)
 {
     for (Int32 i = 0; i < iterations; i++)
     {
         Thread.Sleep(250);
         result = hash.ComputeString(result, Encoding.UTF8).ToString();
     } // end for
 }     // end function MultithreadComputeHash
Exemplo n.º 6
0
        public static byte[] SH224(string str)
        {
            IHash      hash = HashFactory.Crypto.CreateSHA224();
            HashResult r    = hash.ComputeString(str, System.Text.Encoding.UTF8);


            return(r.GetBytes());
        }
Exemplo n.º 7
0
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="sourceStr"></param>
        /// <returns></returns>
        public virtual string Encryption(string sourceStr)
        {
            if (string.IsNullOrWhiteSpace(sourceStr))
            {
                throw new NothingToEncrypOrDecryptException();
            }
            HashResult result    = currentHash.ComputeString(sourceStr, Encode);
            string     resultStr = result.ToString();

            return(ResultFilter(resultStr));
        }
        private void okButton_Click(object sender, EventArgs e)
        {
            if (masterEntryTextBox.Text.Trim().Equals(""))
            {
                MessageBox.Show("Please enter the password.", "Missing Password");
            }
            else
            {
                SQLiteDatabase database   = new SQLiteDatabase();
                string         storedHash = database.SelectHash();

                if (Properties.Settings.Default.UseSHA3Hashing)
                {
                    IHash      hash       = HashFactory.Crypto.SHA3.CreateKeccak512();
                    HashResult hashResult = hash.ComputeString(masterEntryTextBox.Text);

                    if (hashResult.ToString().Equals(storedHash))
                    {
                        // Put user's password in a secure string for later use
                        foreach (char c in masterEntryTextBox.Text)
                        {
                            SharedObject.encryptedPassword.AppendChar(c);
                        }

                        SharedObject.passwordGood = true;
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Password is not valid.  Please try again.", "Invalid Password");
                    }
                }
                else
                {
                    if (PasswordHash.ValidatePassword(masterEntryTextBox.Text, storedHash))
                    {
                        // Put user's password in a secure string for later use
                        foreach (char c in masterEntryTextBox.Text)
                        {
                            SharedObject.encryptedPassword.AppendChar(c);
                        }

                        SharedObject.passwordGood = true;
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Password is not valid.  Please try again.", "Invalid Password");
                    }
                }
            }
        }
Exemplo n.º 9
0
        protected void TestComputeTransforms(IHash a_hash)
        {
            foreach (var creator in m_creators)
            {
                for (int i = 0; i < 10; i++)
                {
                    object v     = creator();
                    byte[] bytes = Converters.ConvertToBytes(v);

                    var h1 = a_hash.ComputeObject(v);
                    var h2 = a_hash.ComputeBytes(bytes);

                    Assert.AreEqual(h1, h2, String.Format("{0}, {1}", a_hash.Name, i));
                }
            }

            {
                var h3 = a_hash.ComputeString("rwffasfger4536552▰Ḑ");
                var h4 = a_hash.ComputeString("rwffasfger4536552▰Ḑ", Encoding.Unicode);

                Assert.AreEqual(h3, h4);
            }
        }
Exemplo n.º 10
0
        private void ChangePassword(HttpContext context)
        {
            string pass = context.Request.Params["pass"];

            if (!string.IsNullOrEmpty(pass))
            {
                Data.dbml.AppUsers u = this.GetDataContext2.AppUsers.First(o => o.ID == Common.UserID);
                IHash      hash      = Common.Hash;
                HashResult res       = hash.ComputeString(pass);
                u.Password = Common.GetString(res.GetBytes());
                GetDataContext2.SubmitChanges();
                context.Response.Write(strings.Pass_Updated);
            }
        }
Exemplo n.º 11
0
        private void ChangePassword(HttpContext context)
        {
            string pass = context.Request.Params["pass"];

            if (!string.IsNullOrEmpty(pass))
            {
                Nails.edmx.AppUsers u = this.GetNailsProdContext.AppUsers.First(o => o.ID == Common.UserID);
                IHash      hash       = Common.Hash;
                HashResult res        = hash.ComputeString(pass);
                u.Password = Common.GetString(res.GetBytes());
                this.GetNailsProdContext.SaveChanges();
                context.Response.Write("Password has been updated");
            }
        }
Exemplo n.º 12
0
        private void okButton_Click(object sender, EventArgs e)
        {
            if (masterEntryTextBox.Text.Trim().Equals("") || masterConfirmTextBox.Text.Trim().Equals(""))
            {
                MessageBox.Show("Password fields cannot be blank.", "Missing Passwords");
            }
            else
            {
                if (masterEntryTextBox.Text.Equals(masterConfirmTextBox.Text))
                {
                    // Put user's password in a secure string for later use
                    foreach (char c in masterEntryTextBox.Text)
                    {
                        SharedObject.encryptedPassword.AppendChar(c);
                    }

                    string hashString;
                    if (Properties.Settings.Default.UseSHA3Hashing)
                    {
                        IHash      hash       = HashFactory.Crypto.SHA3.CreateKeccak512();
                        HashResult hashResult = hash.ComputeString(masterEntryTextBox.Text);

                        hashString = hashResult.ToString();
                    }
                    else
                    {
                        hashString = PasswordHash.CreateHash(masterEntryTextBox.Text);
                    }

                    // Generate a random salt
                    RNGCryptoServiceProvider saltGenerator = new RNGCryptoServiceProvider();
                    byte[] saltBytes = new byte[24];
                    saltGenerator.GetBytes(saltBytes);
                    string salt = Convert.ToBase64String(saltBytes);
                    saltGenerator.Dispose();

                    SQLiteDatabase database = new SQLiteDatabase();
                    database.CreateDatabase();
                    database.InsertHash(hashString, salt);

                    SharedObject.passwordGood = true;
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Passwords do not match.", "Mismatched Passwords");
                }
            }
        }
Exemplo n.º 13
0
        public void TestCheckValue()
        {
            string ActualString, ExpectedString;

            foreach (CRCStandard Idx in CRCStandardValues)
            {
                crcObj = HashFactory.Checksum.CreateCRC(Idx);

                ExpectedString = ((crcObj as ICRC).CheckValue.ToString("X"));

                ActualString = TestHelper.LeftStrip(crcObj.ComputeString(TestConstants.OnetoNine, Encoding.UTF8).ToString(), '0');

                Assert.AreEqual(ExpectedString, ActualString);
            } // end foreach
        }
Exemplo n.º 14
0
        } // end function TestHMACCloneIsCorrect

        public static void TestActualAndExpectedData(object actual, object expected, IHash i_hash)
        {
            string ActualString, name = actual.GetType().Name;

            if (name == "String")
            {
                ActualString = i_hash?.ComputeString((string)actual, Encoding.UTF8).ToString();
            }
            else if (actual.GetType().Name == "Byte[]")
            {
                ActualString = i_hash?.ComputeBytes((byte[])actual).ToString();
            }
            else
            {
                throw new NotImplementedException("Kindly implement new type.");
            }

            Assert.AreEqual(expected, ActualString,
                            String.Format("Expected {0} but got {1}.",
                                          expected, ActualString));
        }
Exemplo n.º 15
0
        public void TestForNullString()
        {
            string ActualString;

            //
            ActualString = hash.ComputeString(null, Encoding.UTF8).ToString();

            //
            Assert.AreEqual(ExpectedHashOfEmptyData, ActualString,
                            String.Format("Expected {0} but got {1}.",
                                          ExpectedHashOfEmptyData, ActualString));

            //
            hash.Initialize();
            hash.TransformString(null, Encoding.UTF8);
            ActualString = hash.TransformFinal().ToString();

            //
            Assert.AreEqual(ExpectedHashOfEmptyData, ActualString,
                            String.Format("Expected {0} but got {1}.",
                                          ExpectedHashOfEmptyData, ActualString));
        } // end function
Exemplo n.º 16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            string strSource = "lichaoqiang";
            string strMd5    = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "md5");

            var md5 = System.Security.Cryptography.MD5.Create();

            byte[]        encrypt  = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strSource));
            StringBuilder sBuilder = new StringBuilder();

            // Loop through each byte of the hashed data
            // and format each one as a hexadecimal string.
            for (int i = 0; i < encrypt.Length; i++)
            {
                sBuilder.Append(encrypt[i].ToString("x2"));
            }
            string strMd52 = sBuilder.ToString();

            //斯内夫鲁
            IHash      hash       = HashLib.HashFactory.Crypto.CreateSnefru_8_128();
            HashResult hashResult = hash.ComputeString("www.lichaoqiang.com");

            Console.WriteLine(hashResult.ToString());

            //hash32
            string strHash32 = HashLib.HashFactory.Hash32.CreateRS().ComputeString("www.lichaoqianag.com").ToString();

            Console.WriteLine("CreateRS:{0}", strHash32);

            strHash32 = HashLib.HashFactory.Hash32.CreatePJW().ComputeString("www.lichaoqianag.com").ToString();
            Console.WriteLine("CreatePJW:{0}", strHash32);

            //
            string strHmac = HashLib.HashFactory.HMAC.CreateHMAC(hash).ComputeString("www.lichaoqiang.com").ToString();

            Console.WriteLine("CreateHMAC:{0}", strHmac);

            Console.ReadLine();
        }
Exemplo n.º 17
0
        protected void TestComputeTransforms(IHash a_hash)
        {
            foreach (var creator in m_creators)
            {
                for (int i = 0; i < 10; i++)
                {
                    object v = creator();
                    byte[] bytes = Converters.ConvertToBytes(v);

                    var h1 = a_hash.ComputeObject(v);
                    var h2 = a_hash.ComputeBytes(bytes);

                    Assert.AreEqual(h1, h2, String.Format("{0}, {1}", a_hash.Name, i));
                }
            }

            {
                var h3 = a_hash.ComputeString("rwffasfger4536552▰Ḑ");
                var h4 = a_hash.ComputeString("rwffasfger4536552▰Ḑ", Encoding.Unicode);

                Assert.AreEqual(h3, h4);
            }
        }
Exemplo n.º 18
0
        public static string Login(string username, string password)
        {
            Query dbQuery = new Query();

            string    query  = dbQuery.LoginQuery(username, password);
            DBConnect db     = new DBConnect();
            DataTable dbResp = db.Select(query);

            try
            {
                string respUsername = dbResp.Rows[0]["username"].ToString();
                string respPassword = dbResp.Rows[0]["password"].ToString();

                // If no exception is caught then the user logged in sucessfully...
                // Make sure to set cookies for later...
                var   response    = HttpContext.Current.Response;
                IHash hash        = HashFactory.Crypto.CreateMD5();
                var   expectedVal = hash.ComputeString(respUsername + respPassword, Encoding.ASCII);
                db.Update(dbQuery.UpdateHash(respUsername, respPassword, expectedVal.ToString()));

                if (response.Cookies["password"] != null)
                {
                    response.Cookies["password"].Value = expectedVal.ToString();
                }
                else
                {
                    var passCookie = new HttpCookie("password");
                    passCookie.Value = expectedVal.ToString();
                    response.Cookies.Add(passCookie);
                }

                if (response.Cookies["userName"] != null)
                {
                    response.Cookies["userName"].Value = respUsername;
                }
                else
                {
                    var userNameCookie = new HttpCookie("userName");
                    userNameCookie.Value = respUsername;
                    response.Cookies.Add(userNameCookie);
                }

                if (response.Cookies["loggedIn"] != null)
                {
                    response.Cookies["loggedIn"].Value = "True";
                }
                else
                {
                    var loggedInCookie = new HttpCookie("loggedIn");
                    loggedInCookie.Value = "True";
                    response.Cookies.Add(loggedInCookie);
                }

                // Send back profile information
                dbResp.Columns.Remove("password");
                string jsonResponse = JsonConvert.SerializeObject(dbResp);

                //Update the last login date...
                if (db.Update(
                        "users",
                        new List <string>(new[] { "lastlogin" }),
                        new List <string>(new[] { DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") }),
                        new List <string>(new[] { "id" }),
                        new List <string>(new[] { "'" + dbResp.Rows[0]["id"].ToString() + "'" }),
                        new List <string>(new[] { "=" })
                        ) > 0)
                {
                    return("{\"Success\" : \"Login sucessful\", \"Info\" : " + jsonResponse + "}");
                }

                return("{\"Error\" : \"Login failed\"}");
            }
            catch (Exception e)
            {
                var response = HttpContext.Current.Response;
                if (response.Cookies["userName"] != null)
                {
                    response.Cookies["userName"].Value = "";
                }
                else
                {
                    var userNameCookie = new HttpCookie("userName");
                    userNameCookie.Value = "";
                    response.Cookies.Add(userNameCookie);
                }

                if (response.Cookies["loggedIn"] != null)
                {
                    response.Cookies["loggedIn"].Value = "False";
                }
                else
                {
                    var loggedInCookie = new HttpCookie("loggedIn");
                    loggedInCookie.Value = "False";
                    response.Cookies.Add(loggedInCookie);
                }

                return("{\"Error\" : \"Login failed\"}");
            }
        }
Exemplo n.º 19
0
        private void TestFastHash32(IHash a_hash)
        {
            IFastHash32 fh = a_hash as IFastHash32;

            if (fh == null)
                return;

            for (int i=0; i<10; i++)
            {
                {
                    var data = m_random.NextBytes((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1 = fh.ComputeBytesFast(data);
                    var h2 = a_hash.ComputeBytes(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextInt();
                    var h1 = fh.ComputeIntFast(data);
                    var h2 = a_hash.ComputeInt(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextUInt();
                    var h1 = fh.ComputeUIntFast(data);
                    var h2 = a_hash.ComputeUInt(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextByte();
                    var h1 = fh.ComputeByteFast(data);
                    var h2 = a_hash.ComputeByte(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextChar();
                    var h1 = fh.ComputeCharFast(data);
                    var h2 = a_hash.ComputeChar(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextShort();
                    var h1 = fh.ComputeShortFast(data);
                    var h2 = a_hash.ComputeShort(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextUShort();
                    var h1 = fh.ComputeUShortFast(data);
                    var h2 = a_hash.ComputeUShort(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextDoubleFull();
                    var h1 = fh.ComputeDoubleFast(data);
                    var h2 = a_hash.ComputeDouble(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextFloatFull();
                    var h1 = fh.ComputeFloatFast(data);
                    var h2 = a_hash.ComputeFloat(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextLong();
                    var h1 = fh.ComputeLongFast(data);
                    var h2 = a_hash.ComputeLong(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextULong();
                    var h1 = fh.ComputeULongFast(data);
                    var h2 = a_hash.ComputeULong(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextUInts((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1 = fh.ComputeUIntsFast(data);
                    var h2 = a_hash.ComputeUInts(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextInts((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1 = fh.ComputeIntsFast(data);
                    var h2 = a_hash.ComputeInts(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextLongs((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1 = fh.ComputeLongsFast(data);
                    var h2 = a_hash.ComputeLongs(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextULongs((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1 = fh.ComputeULongsFast(data);
                    var h2 = a_hash.ComputeULongs(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextDoublesFull((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1 = fh.ComputeDoublesFast(data);
                    var h2 = a_hash.ComputeDoubles(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextFloatsFull((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1 = fh.ComputeFloatsFast(data);
                    var h2 = a_hash.ComputeFloats(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextChars((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1 = fh.ComputeCharsFast(data);
                    var h2 = a_hash.ComputeChars(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextUShorts((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1 = fh.ComputeUShortsFast(data);
                    var h2 = a_hash.ComputeUShorts(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextString((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1 = fh.ComputeStringFast(data);
                    var h2 = a_hash.ComputeString(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextShorts((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1 = fh.ComputeShortsFast(data);
                    var h2 = a_hash.ComputeShorts(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }
            }
        }
Exemplo n.º 20
0
        protected void TestHashImplementationValueType(IHash a_baseHashFunction, IHash a_hash)
        {
            for(int j = 0; j < 8; j++)
            {
                {
                    byte v = m_random.NextByte();
                    Assert.AreEqual(a_baseHashFunction.ComputeByte(v), a_hash.ComputeByte(v),
                                    a_hash.Name);
                }

                {
                    char v = m_random.NextChar();
                    Assert.AreEqual(a_baseHashFunction.ComputeChar(v), a_hash.ComputeChar(v),
                                    a_hash.Name);
                }

                {
                    short v = m_random.NextShort();
                    Assert.AreEqual(a_baseHashFunction.ComputeShort(v), a_hash.ComputeShort(v),
                                    a_hash.Name);
                }

                {
                    ushort v = m_random.NextUShort();
                    Assert.AreEqual(a_baseHashFunction.ComputeUShort(v), a_hash.ComputeUShort(v),
                                    a_hash.Name);
                }

                {
                    int v = m_random.Next();
                    Assert.AreEqual(a_baseHashFunction.ComputeInt(v), a_hash.ComputeInt(v),
                                    a_hash.Name);
                }

                {
                    uint v = m_random.NextUInt();
                    Assert.AreEqual(a_baseHashFunction.ComputeUInt(v), a_hash.ComputeUInt(v),
                                    a_hash.Name);
                }

                {
                    long v = m_random.NextLong();
                    Assert.AreEqual(a_baseHashFunction.ComputeLong(v), a_hash.ComputeLong(v),
                                    a_hash.Name);
                }

                {
                    ulong v = m_random.NextULong();
                    Assert.AreEqual(a_baseHashFunction.ComputeULong(v), a_hash.ComputeULong(v),
                                    a_hash.Name);
                }

                {
                    double v = m_random.NextDoubleFull();
                    Assert.AreEqual(a_baseHashFunction.ComputeDouble(v), a_hash.ComputeDouble(v),
                                    a_hash.Name);
                }

                {
                    float v = m_random.NextFloatFull();
                    Assert.AreEqual(a_baseHashFunction.ComputeFloat(v), a_hash.ComputeFloat(v),
                                    a_hash.Name);
                }
            }

            for(int j = 0; j < 2; j++)
            {
                for(int i = 2050; i <= (a_hash.BlockSize * 3 + 1); i++)
                {
                    byte[] v = m_random.NextBytes(i);
                    Assert.AreEqual(a_baseHashFunction.ComputeBytes(v), a_hash.ComputeBytes(v),
                                    String.Format("{0}, {1}", a_hash.Name, i));
                }

                for(int i = 0; i <= (a_hash.BlockSize * 3 + 1) / 2; i++)
                {
                    char[] v = m_random.NextChars(i);
                    Assert.AreEqual(a_baseHashFunction.ComputeChars(v), a_hash.ComputeChars(v),
                                    String.Format("{0}, {1}", a_hash.Name, i));
                }

                for(int i = 0; i <= (a_hash.BlockSize * 3 + 1) / 2; i++)
                {
                    short[] v = m_random.NextShorts(i);
                    Assert.AreEqual(a_baseHashFunction.ComputeShorts(v), a_hash.ComputeShorts(v),
                                    String.Format("{0}, {1}", a_hash.Name, i));
                }

                for(int i = 0; i <= (a_hash.BlockSize * 3 + 1) / 2; i++)
                {
                    ushort[] v = (from n in Enumerable.Range(0, i) select m_random.NextUShort()).ToArray();
                    Assert.AreEqual(a_baseHashFunction.ComputeUShorts(v), a_hash.ComputeUShorts(v),
                                    String.Format("{0}, {1}", a_hash.Name, i));
                }

                for(int i = 0; i <= (a_hash.BlockSize * 3 + 1) / 4; i++)
                {
                    int[] v = m_random.NextInts(i);
                    Assert.AreEqual(a_baseHashFunction.ComputeInts(v), a_hash.ComputeInts(v),
                                    String.Format("{0}, {1}", a_hash.Name, i));
                }

                for(int i = 0; i <= (a_hash.BlockSize * 3 + 1) / 4; i++)
                {
                    uint[] v = m_random.NextUInts(i);
                    Assert.AreEqual(a_baseHashFunction.ComputeUInts(v), a_hash.ComputeUInts(v),
                                    String.Format("{0}, {1}", a_hash.Name, i));
                }

                for(int i = 1; i <= (a_hash.BlockSize * 3 + 1) / 8; i++)
                {
                    long[] v = m_random.NextLongs(i);
                    Assert.AreEqual(a_baseHashFunction.ComputeLongs(v), a_hash.ComputeLongs(v),
                                    String.Format("{0}, {1}", a_hash.Name, i));
                }

                for(int i = 0; i <= (a_hash.BlockSize * 3 + 1) / 8; i++)
                {
                    ulong[] v = m_random.NextULongs(i);
                    Assert.AreEqual(a_baseHashFunction.ComputeULongs(v), a_hash.ComputeULongs(v),
                                    String.Format("{0}, {1}", a_hash.Name, i));
                }

                for(int i = 0; i <= (a_hash.BlockSize * 3 + 1) / 8; i++)
                {
                    double[] v = m_random.NextDoublesFull(i);
                    Assert.AreEqual(a_baseHashFunction.ComputeDoubles(v), a_hash.ComputeDoubles(v),
                                    String.Format("{0}, {1}", a_hash.Name, i));
                }

                for(int i = 0; i <= (a_hash.BlockSize * 3 + 1) / 4; i++)
                {
                    float[] v = m_random.NextFloatsFull(i);
                    Assert.AreEqual(a_baseHashFunction.ComputeFloats(v), a_hash.ComputeFloats(v),
                                    String.Format("{0}, {1}", a_hash.Name, i));
                }

                for(int i = 0; i <= (a_hash.BlockSize * 3 + 1) / 2; i++)
                {
                    string v = m_random.NextString(i);
                    Assert.AreEqual(a_baseHashFunction.ComputeString(v), a_hash.ComputeString(v),
                                    String.Format("{0}, {1}", a_hash.Name, i));
                }
            }
        }
        private void okButton_Click(object sender, EventArgs e)
        {
            if (masterEntryTextBox.Text.Trim().Equals("") || masterConfirmTextBox.Text.Trim().Equals(""))
            {
                MessageBox.Show("Password fields cannot be blank.", "Missing Password");
            }
            else
            {
                if (masterEntryTextBox.Text.Equals(masterConfirmTextBox.Text))
                {
                    database = new SQLiteDatabase();

                    credentials = database.SelectAllSecureCredentials();

                    // Decrypt all the usernames and passwords using the old key
                    for (int i = 0; i < credentials.Count; i++)
                    {
                        credentials[i].username = CredentialEncryption.DecryptCredential(credentials[i].username);
                        credentials[i].password = CredentialEncryption.DecryptCredential(credentials[i].password);
                    }

                    string hashString;
                    if (Properties.Settings.Default.UseSHA3Hashing)
                    {
                        IHash      hash       = HashFactory.Crypto.SHA3.CreateKeccak512();
                        HashResult hashResult = hash.ComputeString(masterEntryTextBox.Text);

                        hashString = hashResult.ToString();
                    }
                    else
                    {
                        hashString = PasswordHash.CreateHash(masterEntryTextBox.Text);
                    }

                    database.UpdateHash(hashString);

                    // Update salt?

                    // Put user's password in a secure string for later use
                    SharedObject.encryptedPassword.Clear();
                    foreach (char c in masterEntryTextBox.Text)
                    {
                        SharedObject.encryptedPassword.AppendChar(c);
                    }

                    // Re-encrypt all the usernames and password using the new key
                    CredentialEncryption.DeriveKey();
                    for (int i = 0; i < credentials.Count; i++)
                    {
                        credentials[i].username = CredentialEncryption.EncryptCredential(credentials[i].username);
                        credentials[i].password = CredentialEncryption.EncryptCredential(credentials[i].password);

                        database.UpdateSecureCredential(credentials[i], credentials[i].id);
                    }

                    // SharedObject.passwordGood = true;
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Passwords do not match.", "Mismatched Passwords");
                }
            }
        }
Exemplo n.º 22
0
        public static void Main(string[] args)
        {
            // Prepare temp file.
            string file_name = Path.GetTempFileName();

            using (var fs = new FileStream(file_name, FileMode.Open))
            {
                byte[] v = new byte[256];
                new Random().NextBytes(v);
                fs.Write(v, 0, v.Length);
            }

            // Prepare stream.
            MemoryStream ms = new MemoryStream(new byte[] { 2, 3, 4, 5, 6, 7 });

            // Choose algorithm. Explore HashFactory for more algorithms.
            IHash hash = HashFactory.Crypto.CreateSHA256();

            // Hash data immediate.
            HashResult r = hash.ComputeString("test", Encoding.ASCII);

            // Hash data.
            hash.Initialize(); // Not mandatory after Compute and TransformFinal
            hash.TransformULong(6);
            hash.TransformString("test");
            r = hash.TransformFinal();

            // Calculate 32-bits hash.
            hash = HashFactory.Checksum.CreateCRC32_IEEE();
            uint crc32 = hash.ComputeString("test", Encoding.ASCII).GetUInt();

            // For CRCs you may specify parameters.
            hash = HashFactory.Checksum.CreateCRC32(
                HashLib.Checksum.CRC32Polynomials.IEEE_802_3, uint.MaxValue, uint.MaxValue);
            hash = HashFactory.Checksum.CreateCRC32(
                0xF0F0F0F0, uint.MaxValue, uint.MaxValue);

            // Most hashes can be created in two ways.
            hash = HashFactory.Crypto.CreateHaval(HashRounds.Rounds3, HashSize.HashSize256);
            hash = HashFactory.Crypto.CreateHaval_3_256();

            // Calculate 64-bits hash.
            hash = HashFactory.Hash64.CreateMurmur2();
            ulong crc64 = hash.ComputeString("test", Encoding.ASCII).GetULong();

            // Calculate hash with key.
            var hash_with_key = HashFactory.Hash128.CreateMurmur3_128();

            hash_with_key.Key = new MersenneTwister().NextBytes(hash_with_key.KeyLength.Value);
            r = hash_with_key.ComputeString("test", Encoding.ASCII);
            // This will restore default key.
            hash_with_key.Key = null;

            // Get some information about algorithm. BlockSize has only informative meaning.
            System.Console.WriteLine("{0}, {1}, {2}", hash.BlockSize, hash.HashSize, hash.Name);

            // Here you can find algorithms grouped by its properties.
            foreach (var h in Hashes.CryptoAll)
            {
                System.Console.WriteLine(((IHash)Activator.CreateInstance(h)).Name);
            }
            foreach (var h in Hashes.CryptoNotBuildIn)
            {
                System.Console.WriteLine(((IHash)Activator.CreateInstance(h)).Name);
            }
            foreach (var h in Hashes.CryptoBuildIn)
            {
                System.Console.WriteLine(((IHash)Activator.CreateInstance(h)).Name);
            }
            foreach (var h in Hashes.Checksums)
            {
                System.Console.WriteLine(((IHash)Activator.CreateInstance(h)).Name);
            }
            // ... And more

            // Hash stream.
            r           = hash.ComputeStream(ms);
            ms.Position = 2;
            r           = hash.ComputeStream(ms);    // Compute all bytes starting from 2
            ms.Position = 3;
            r           = hash.ComputeStream(ms, 2); // Compute 2 bytes starting from 3

            hash.TransformInt(111);
            ms.Position = 0;
            hash.TransformStream(ms);
            r = hash.TransformFinal();

            // Hash file
            r = hash.ComputeFile(file_name);
            r = hash.ComputeFile(file_name, 10);     // Compute all bytes starting from 10
            r = hash.ComputeFile(file_name, 12, 10); // Compute 10 bytes starting from 12.

            hash.TransformInt(111);
            hash.TransformFile(file_name);
            r = hash.TransformFinal();

            // Calculate HMAC.
            IHMAC hmac = HashFactory.HMAC.CreateHMAC(HashFactory.Crypto.CreateSHA256());

            hmac.Key = Converters.ConvertStringToBytes("secret", Encoding.ASCII);
            r        = hmac.ComputeString("test", Encoding.ASCII);
            Debug.Assert(hmac.KeyLength == null, "NULL means key can be any length");

            // Get System.Security.Cryptography.HashAlgorithm wrapper for algorithms from this library.
            System.Security.Cryptography.HashAlgorithm hash2 = HashFactory.Wrappers.HashToHashAlgorithm(hash);

            // And back.
            hash = HashFactory.Wrappers.HashAlgorithmToHash(hash2);

            // Some algorithms have fast specialized methods for calculating hashes for all data types.
            // They are designed for calculating good-behaving hash codes for hash-tables.
            hash = HashFactory.Hash32.CreateMurmur2();
            Debug.Assert(hash is IFastHash32);

            // Some algorithms can calculated hashes only when they had all needed data,
            // they accumulated data to the very end.
            hash = HashFactory.Hash32.CreateMurmur2();
            Debug.Assert(hash is INonBlockHash);

            // Use build-in cryptography hash algorithms.
            hash = HashFactory.Crypto.BuildIn.CreateSHA256Cng();

            // Delete temp file.
            new FileInfo(file_name).Delete();
        }
Exemplo n.º 23
0
        private void TestFastHash32(IHash a_hash)
        {
            IFastHash32 fh = a_hash as IFastHash32;

            if (fh == null)
            {
                return;
            }

            for (int i = 0; i < 10; i++)
            {
                {
                    var data = m_random.NextBytes((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1   = fh.ComputeBytesFast(data);
                    var h2   = a_hash.ComputeBytes(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextInt();
                    var h1   = fh.ComputeIntFast(data);
                    var h2   = a_hash.ComputeInt(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextUInt();
                    var h1   = fh.ComputeUIntFast(data);
                    var h2   = a_hash.ComputeUInt(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextByte();
                    var h1   = fh.ComputeByteFast(data);
                    var h2   = a_hash.ComputeByte(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextChar();
                    var h1   = fh.ComputeCharFast(data);
                    var h2   = a_hash.ComputeChar(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextShort();
                    var h1   = fh.ComputeShortFast(data);
                    var h2   = a_hash.ComputeShort(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextUShort();
                    var h1   = fh.ComputeUShortFast(data);
                    var h2   = a_hash.ComputeUShort(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextDoubleFull();
                    var h1   = fh.ComputeDoubleFast(data);
                    var h2   = a_hash.ComputeDouble(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextFloatFull();
                    var h1   = fh.ComputeFloatFast(data);
                    var h2   = a_hash.ComputeFloat(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextLong();
                    var h1   = fh.ComputeLongFast(data);
                    var h2   = a_hash.ComputeLong(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextULong();
                    var h1   = fh.ComputeULongFast(data);
                    var h2   = a_hash.ComputeULong(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextUInts((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1   = fh.ComputeUIntsFast(data);
                    var h2   = a_hash.ComputeUInts(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextInts((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1   = fh.ComputeIntsFast(data);
                    var h2   = a_hash.ComputeInts(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextLongs((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1   = fh.ComputeLongsFast(data);
                    var h2   = a_hash.ComputeLongs(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextULongs((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1   = fh.ComputeULongsFast(data);
                    var h2   = a_hash.ComputeULongs(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextDoublesFull((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1   = fh.ComputeDoublesFast(data);
                    var h2   = a_hash.ComputeDoubles(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextFloatsFull((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1   = fh.ComputeFloatsFast(data);
                    var h2   = a_hash.ComputeFloats(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextChars((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1   = fh.ComputeCharsFast(data);
                    var h2   = a_hash.ComputeChars(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextUShorts((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1   = fh.ComputeUShortsFast(data);
                    var h2   = a_hash.ComputeUShorts(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextString((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1   = fh.ComputeStringFast(data);
                    var h2   = a_hash.ComputeString(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }

                {
                    var data = m_random.NextShorts((i == 0) ? 0 : (int)(m_random.NextUInt() % 200));
                    var h1   = fh.ComputeShortsFast(data);
                    var h2   = a_hash.ComputeShorts(data);
                    Assert.AreEqual(h1, h2.GetInt());
                }
            }
        }
Exemplo n.º 24
0
        public void Test(IHash a_hash, SpeedTestDataSourceRow a_row, bool a_bFast)
        {
            Random r = new Random();

            int length = 10000000;

            {
                byte[] ar = new byte[length];
                r.NextBytes(ar);

                if (a_bFast)
                {
                    a_hash.ComputeByte(ar[0]);

                    a_row.ByteSpeed = Measure(ar.Length, () =>
                    {
                        for (int i = 0; i < ar.Length; i++)
                            a_hash.ComputeByte(ar[i]);
                    });
                }

                a_hash.ComputeBytes(ar.Take(100).ToArray());

                a_row.BytesSpeed = Measure(ar.Length, () =>
                {
                    a_hash.ComputeBytes(ar);
                });
            }

            {
                if (a_bFast)
                {
                    char[] ar = (from n in Enumerable.Range(0, length / 2) select (char)r.Next()).ToArray();

                    a_hash.ComputeChar(ar[0]);

                    a_row.CharSpeed = Measure(ar.Length * 2, () =>
                    {
                        for (int i = 0; i < ar.Length; i++)
                            a_hash.ComputeChar(ar[i]);
                    });

                    a_hash.ComputeChars(ar.Take(100).ToArray());

                    a_row.CharsSpeed = Measure(ar.Length * 2, () =>
                    {
                        a_hash.ComputeChars(ar);
                    });
                }
            }

            {
                if (a_bFast)
                {
                    short[] ar = (from n in Enumerable.Range(0, length / 2) select (short)r.Next()).ToArray();

                    a_hash.ComputeShort(ar[0]);

                    a_row.ShortSpeed = Measure(ar.Length * 2, () =>
                    {
                        for (int i = 0; i < ar.Length; i++)
                            a_hash.ComputeShort(ar[i]);
                    });

                    a_hash.ComputeShorts(ar.Take(100).ToArray());

                    a_row.ShortsSpeed = Measure(ar.Length * 2, () =>
                    {
                        a_hash.ComputeShorts(ar);
                    });
                }
            }

            {
                if (a_bFast)
                {
                    ushort[] ar = (from n in Enumerable.Range(0, length / 2) select (ushort)r.Next()).ToArray();

                    a_hash.ComputeUShort(ar[0]);

                    a_row.UShortSpeed = Measure(ar.Length * 2, () =>
                    {
                        for (int i = 0; i < ar.Length; i++)
                            a_hash.ComputeUShort(ar[i]);
                    });

                    a_hash.ComputeUShorts(ar.Take(100).ToArray());

                    a_row.UShortsSpeed = Measure(ar.Length * 2, () =>
                    {
                        a_hash.ComputeUShorts(ar);
                    });
                }
            }

            {
                if (a_bFast)
                {
                    int[] ar = (from n in Enumerable.Range(0, length / 4) select r.Next()).ToArray();

                    a_hash.ComputeInt(ar[0]);

                    a_row.IntSpeed = Measure(ar.Length * 4, () =>
                    {
                        for (int i = 0; i < ar.Length; i++)
                            a_hash.ComputeInt(ar[i]);
                    });

                    a_hash.ComputeInts(ar.Take(100).ToArray());

                    a_row.IntsSpeed = Measure(ar.Length * 4, () =>
                    {
                        a_hash.ComputeInts(ar);
                    });
                }
            }

            {
                if (a_bFast)
                {
                    uint[] ar = (from n in Enumerable.Range(0, length / 4) select (uint)r.Next()).ToArray();

                    a_hash.ComputeUInt(ar[0]);

                    a_row.UIntSpeed = Measure(ar.Length * 4, () =>
                    {
                        for (int i = 0; i < ar.Length; i++)
                            a_hash.ComputeUInt(ar[i]);
                    });

                    a_hash.ComputeUInts(ar.Take(100).ToArray());

                    a_row.UIntsSpeed = Measure(ar.Length * 4, () =>
                    {
                        a_hash.ComputeUInts(ar);
                    });
                }
            }

            {
                if (a_bFast)
                {
                    long[] ar = (from n in Enumerable.Range(0, length / 8) select (long)(((ulong)r.Next() + (ulong)r.Next() * (ulong)Math.Pow(2, 32)))).ToArray();

                    a_hash.ComputeLong(ar[0]);

                    a_row.LongSpeed = Measure(ar.Length * 8, () =>
                    {
                        for (int i = 0; i < ar.Length; i++)
                            a_hash.ComputeLong(ar[i]);
                    });

                    a_hash.ComputeLongs(ar.Take(100).ToArray());

                    a_row.LongsSpeed = Measure(ar.Length * 8, () =>
                    {
                        a_hash.ComputeLongs(ar);
                    });
                }
            }

            {
                if (a_bFast)
                {
                    ulong[] ar = (from n in Enumerable.Range(0, length / 8) select ((ulong)r.Next() + (ulong)r.Next() * (ulong)Math.Pow(2, 32))).ToArray();

                    a_hash.ComputeULong(ar[0]);

                    a_row.ULongSpeed = Measure(ar.Length * 8, () =>
                    {
                        for (int i = 0; i < ar.Length; i++)
                            a_hash.ComputeULong(ar[i]);
                    });

                    a_row.ULongsSpeed = Measure(ar.Length * 8, () =>
                    {
                        a_hash.ComputeULongs(ar);
                    });
                }
            }

            {
                if (a_bFast)
                {
                    float[] ar = (from n in Enumerable.Range(0, length / 8) select (float)(r.NextDouble() * r.Next())).ToArray();

                    a_hash.ComputeFloat(ar[0]);

                    a_row.FloatSpeed = Measure(ar.Length * 4, () =>
                    {
                        for (int i = 0; i < ar.Length; i++)
                            a_hash.ComputeFloat(ar[i]);
                    });

                    a_hash.ComputeFloats(ar.Take(100).ToArray());

                    a_row.FloatsSpeed = Measure(ar.Length * 4, () =>
                    {
                        a_hash.ComputeFloats(ar);
                    });
                }
            }

            {
                if (a_bFast)
                {
                    double[] ar = (from n in Enumerable.Range(0, length / 8) select r.NextDouble() * r.Next()).ToArray();

                    a_hash.ComputeDouble(ar[0]);

                    a_row.DoubleSpeed = Measure(ar.Length * 8, () =>
                    {
                        for (int i = 0; i < ar.Length; i++)
                            a_hash.ComputeDouble(ar[i]);
                    });

                    a_hash.ComputeDoubles(ar.Take(100).ToArray());

                    a_row.DoublesSpeed = Measure(ar.Length * 8, () =>
                    {
                        a_hash.ComputeDoubles(ar);
                    });
                }
            }

            {
                if (a_bFast)
                {
                    byte[] a = new byte[length];
                    r.NextBytes(a);
                    string ar = new String((from b in a select (char)(b / 2 + 32)).ToArray());

                    a_hash.ComputeString(ar.Substring(0, 100));

                    a_row.StringSpeed = Measure(ar.Length * 2, () =>
                    {
                        a_hash.ComputeString(ar);
                    });
                }
            }
        }