示例#1
0
        public void LoadDataFromCache()
        {
            PasswordCheckDataList.Clear();
            try
            {
                string  jsonContent = File.ReadAllText(CacheFilePath, Encoding.UTF8);
                JObject json        = JObject.Parse(jsonContent);

                LastCheck = Newtonsoft.Json.JsonConvert.DeserializeObject <DateTime>(
                    json[nameof(LastCheck)].ToString(),
                    PasswordCheckData.dateTimeConverter);
                NumberOfPassword        = json[nameof(NumberOfPassword)].ToObject <int>();
                NumberOfSkippedPassword = json[nameof(NumberOfSkippedPassword)].ToObject <int>();

                JArray jArray = json["data"].ToObject <JArray>();
                foreach (JObject jsonData in jArray)
                {
                    PasswordCheckData item = new PasswordCheckData();
                    item.LoadFromJSON(jsonData);
                    PasswordCheckDataList.Add(item);
                }
            }
            catch (Exception Ex)
            {
                Debug.WriteLine("Unable to load data from the file " + CacheFilePath + ". Error: " + Ex.Message);
                throw new Exception(string.Format(AppResources.errPwdCheckerLoadFileFailed, Ex.Message));
            }
        }
示例#2
0
        public async Task VerifyPasswords()
        {
            var accounts = await App.PwdManager.GetPasswordList();

            int itemId = 0, numItems = accounts.Count, numSkip = 0;

            PasswordCheckDataList.Clear();
            foreach (PwdListItem item in accounts)
            {
                try
                {
                    if (item.SkipCheck)
                    {
                        numSkip++;
                        continue;
                    }

                    Zxcvbn.Result result = Checker.EvaluatePassword(item.Password);

                    bool bOld  = IsPasswordToOld(item);
                    bool bWeak = IsPasswordTooWeak(result);

                    if (bOld || bWeak)
                    {
                        PasswordCheckData checkData = new PasswordCheckData
                        {
                            PwdId      = item.Id,
                            LastChange = item.LastPwdChangeDateTime
                        };

                        if (bOld)
                        {
                            checkData.Issues.Add(PwdIssue.TooOld);
                        }
                        if (bWeak)
                        {
                            checkData.Issues.Add(PwdIssue.TooWeak);
                        }

                        checkData.StrengthData.CalcTime  = result.CalcTime;
                        checkData.StrengthData.CrackTime = result.CrackTime;
                        checkData.StrengthData.Entropy   = Math.Round(result.Entropy) - 1;
                        checkData.StrengthData.Score     = result.Score;

                        PasswordCheckDataList.Add(checkData);
                    }
                }
                finally
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        OnVerify?.Invoke(++itemId, numItems, item);
                    });
                }
            }

            LastCheck               = DateTime.Now;
            NumberOfPassword        = numItems;
            NumberOfSkippedPassword = numSkip;

            SaveCache();
        }