示例#1
0
        private bool TestPassword(string psw)
        {
            _ms.Position = 0;
            var response = Crypter.Decrypt(VocabularyProviderFactory.CreateProvider(psw), _ms);

            return(response.Contains("parter"));
        }
        private void LoadFile()
        {
            var stream = ContentResolver.OpenInputStream(ContentReference);

            if (DecryptRadioButton.Checked)
            {
                const int MEGABYTE    = 1024 * 1024;
                var       tempBuffers = new List <byte[]>();
                int       totalRead   = 0;
                int       read;
                //read all into memory
                do
                {
                    var tempBuffer = new byte[MEGABYTE];
                    read = stream.Read(tempBuffer, 0, MEGABYTE);
                    if (read > 0)
                    {
                        totalRead += read;
                        tempBuffers.Add(tempBuffer);
                    }
                } while (read == MEGABYTE);
                //assemble back into one buffer
                var buffer = new byte[totalRead];
                for (int i = 0; i < tempBuffers.Count; i++)
                {
                    Array.Copy(tempBuffers[i], 0, buffer, i * MEGABYTE, i == tempBuffers.Count - 1 ? totalRead % MEGABYTE : MEGABYTE);
                }
                //decrypt
                string decoded;
                using (var wrapper = new MemoryStream(buffer))
                {
                    decoded = Crypter.Decrypt(VocabularyProviderFactory.CreateProvider(PasswordBox.Text), wrapper);
                }
                //replace tabs with tab stops
                var builder = new StringBuilder();
                int counter = 0;
                for (int i = 0; i < decoded.Length; i++)
                {
                    switch (decoded[i])
                    {
                    case '\r':
                    case '\n':
                        counter = 0;
                        builder.Append(decoded[i]);
                        break;

                    case '\t':
                        var delta = 8 - (counter % 8);
                        counter += delta;
                        builder.Append(' ', delta);
                        break;

                    default:
                        counter++;
                        builder.Append(decoded[i]);
                        break;
                    }
                }
                //set content
                ContentViewer.Text = builder.ToString();
            }
            else
            {
                using (var istr = new StreamReader(stream))
                {
                    ContentViewer.Text = istr.ReadToEnd();
                }
            }
            SettingsGrid.Visibility  = ViewStates.Gone;
            ContentViewer.Visibility = ViewStates.Visible;
        }