示例#1
0
        /// <summary>
        /// Sauvegarde l'instance du manager de contact en utilisant la méthode de
        /// sérialisation spécifiée.
        /// </summary>
        /// <param name="serialisationMethod">La méthode de sérialisation à utiliser pour la sérialisation.</param>
        private void SaveToFile(string serialisationMethod)
        {
            string filePath = GetFilePath();

            Console.WriteLine("Ajoutez un mot de passe (Peut être vide, utilisera le SID): ");
            string password = Console.ReadLine();

            byte[] encryptionKey = ContactManagerCryptography.GetKeyFromPassword(password);

            try
            {
                IContactManagerSerializer serializer = SerializerFactory.Create(serialisationMethod);
                using (FileStream fileStream = new FileStream(filePath, FileMode.Create))
                {
                    using (CryptoStream cryptoStream = ContactManagerCryptography.EncryptionStream(encryptionKey, fileStream))
                    {
                        serializer.Serialize(cryptoStream, _contactManager);
                        Console.WriteLine($"Contacts sauvegardés dans: \"{filePath}\"");
                    }
                }
            }
            catch (SerializationException e)
            {
                Console.WriteLine($"Erreur de sauvegarde: {e.Message}");
            }
            catch (ArgumentException)
            {
                Console.WriteLine("Type de sérialisation invalide.");
            }
        }
示例#2
0
        /// <summary>
        /// Charge une instance du manager de contact.
        /// </summary>
        /// <param name="deserializationMethod">La méthode de déserialisation à utiliser</param>
        private void LoadFromFile(string deserializationMethod)
        {
            string filePath = GetFilePath();

            if (!File.Exists(filePath))
            {
                Console.Error.WriteLine("Le fichier de base n'existe pas.");
                return;
            }

            Console.WriteLine("Entrez le mot de passe :");
            string password = Console.ReadLine();

            byte[] decryptionKey = ContactManagerCryptography.GetKeyFromPassword(password);

            try
            {
                IContactManagerSerializer deserializer = SerializerFactory.Create(deserializationMethod);
                using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
                {
                    using (CryptoStream cryptoStream = ContactManagerCryptography.DecryptionStream(decryptionKey, fileStream))
                    {
                        _contactManager = deserializer.Deserialize(cryptoStream);
                        _contactManager.RemakeTree(_contactManager.RootFolder);
                        _contactManager.CurrentFolder = _contactManager.RootFolder;
                        Console.WriteLine($"Contacts chargés depuis: \"{filePath}\"");
                        _passwordTries = 0;
                    }
                }
            }
            catch (Exception e) when(
                e is SerializationException ||
                e is CryptographicException)
            {
                Console.Error.WriteLine($"Le chargement a échoué: Le mot de passe est incorrect.\n" +
                                        $"Nombre d'essais: {++_passwordTries}, Essais restants: {MAX_PASSWORD_TRIES - _passwordTries}");
                if (_passwordTries >= MAX_PASSWORD_TRIES)
                {
                    Console.Error.WriteLine("Le nombre d'essais maximum a été dépassé. Le fichier va être supprimé.");
                    File.Delete(filePath);
                    _passwordTries = 0;
                }
            } catch (ArgumentException)
            {
                Console.WriteLine("Type de sérialisation invalide");
            }
        }