private void StartDecrypting(Object sender, RoutedEventArgs e) { if (filename == null) { MessageBox.Show("No file chosen", "Cryptographer", MessageBoxButton.OK, MessageBoxImage.Error); return; } string selectedUserEmail; try { selectedUserEmail = usersBox.SelectedItem.ToString().Split(' ')[1]; } catch (Exception) { return; } if (selectedUserEmail != UsersControler.currentUser.email) { var x = usersBox.SelectedItem.ToString(); var y = UsersControler.currentUser.email; return; } string encryptedFileContent = File.ReadAllText(filepath); string XMLStringMetadata = encryptedFileContent.Split(new[] { "</EncryptedFileHeader>" }, StringSplitOptions.None)[0] + "</EncryptedFileHeader>"; string encyptedData = encryptedFileContent.Split(new[] { "</EncryptedFileHeader>" }, StringSplitOptions.None)[1]; string sessionKey = null; XmlDocument doc = new XmlDocument(); doc.LoadXml(XMLStringMetadata); byte[] IV = Convert.FromBase64String(doc.SelectSingleNode("EncryptedFileHeader/IV").InnerText); CipherMode encryptionMode = 0; string cipherMode = doc.SelectSingleNode("EncryptedFileHeader/CipherMode").InnerText; if (cipherMode == "ECB") { encryptionMode = CipherMode.ECB; } if (cipherMode == "CBC") { encryptionMode = CipherMode.CBC; } if (cipherMode == "CFB") { encryptionMode = CipherMode.CFB; } XmlNodeList approvedUserNodes = doc.SelectNodes("/EncryptedFileHeader/ApprovedUsers"); foreach (XmlNode node in approvedUserNodes) { if (UsersControler.currentUser.email == node.SelectSingleNode("User/Email").InnerText) { string encryptedSessionKey = node.SelectSingleNode("User/SessionKey").InnerText; sessionKey = Decrypt(encryptedSessionKey, UsersControler.currentUser.rsaPublicPrivateKey); break; } } if (sessionKey == null) { MessageBox.Show("No user fitting to detailed in XML metadata"); return; } SaveFileDialog sf = new SaveFileDialog(); sf.FileName = filename.Remove(filename.Length - 4); bool?safeDialogResult = sf.ShowDialog(); if (safeDialogResult == true) { File.WriteAllText(Path.GetFullPath(sf.FileName), AESCryptography.DecryptStringFromBytes(Convert.FromBase64String(encyptedData), Convert.FromBase64String(sessionKey), IV, encryptionMode)); } }