public void SaveVault(string filename) { /// Serialize MemoryStream stream = new MemoryStream(); BinaryFormatter serializer = new BinaryFormatter(); serializer.Serialize(stream, Entries); byte [] serializedVault = stream.ToArray(); /// Encrypt IEncryptionUtility encryptor = EncryptionUtilityFactory.BuildEncryptionUtility(); byte [] encryptedVault = encryptor.EncryptBinary( serializedVault, this.Password); /// Save encrypted contents to file, overwritting if exists FileStream outputFile = new FileStream(filename, FileMode.Create); outputFile.Write(encryptedVault, 0, encryptedVault.Length); outputFile.Close(); isUnsavedChanges = false; }
public void OpenVault(string filename) { // open file FileStream inputFile = new FileStream(filename, FileMode.Open); byte [] encryptedVault = new byte [inputFile.Length]; inputFile.Read(encryptedVault, 0, ( int )inputFile.Length); inputFile.Close(); IEncryptionUtility decryptor = EncryptionUtilityFactory.BuildEncryptionUtility(); byte [] serializedVault; try { /// Decrypt serializedVault = decryptor.DecryptBinary( encryptedVault, this.Password); MemoryStream stream = new MemoryStream(serializedVault); // Deserialize BinaryFormatter deserializer = new BinaryFormatter(); this.Entries = (ObservableCollection <Entry>)deserializer.Deserialize(stream); } catch (CryptographicException) { throw new VaultOpeningException( "Unable to decrypt vault, check your password."); } catch (SerializationException) { throw new VaultOpeningException( "Unable to open vault, check your password, " + "or the file may be corrupt."); } }