示例#1
0
        /// <summary>
        /// Provides files recovery feature
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRecoverFiles_Click(object sender, RoutedEventArgs e)
        {
            string securityAnswer = textBoxSecurityAnswer.Text.ToLower();
            string password       = textBoxRecoveryPassword.Password;

            if (EncryptedFiles.Count.Equals(0))
            {
                MessageBox.Show("You have no files to recover.", "No encrypted files found", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            {
                if (DataCryptography.SHA512(securityAnswer).Equals(LoggedUser.GetAnswer()) && DataCryptography.SHA512(password).Equals(LoggedUser.GetPassword()))
                {
                    MessageBoxResult result = MessageBox.Show("Do you want to recover your files? All your program settings and keys will be deleted.", "Files recovery system", MessageBoxButton.YesNo, MessageBoxImage.Question);

                    if (result.Equals(MessageBoxResult.Yes))
                    {
                        string aesKey = DataCryptography.SHA512(DataCryptography.GenerateAesKey(this.Username,
                                                                                                password,
                                                                                                LoggedUser.GetQuestion(),
                                                                                                securityAnswer));

                        List <string> tempEncryptedFiles = new List <string>(EncryptedFiles);
                        EncryptedFiles.Clear();
                        Files.Clear();
                        Folders.Clear();
                        TrustedDevices.Clear();

                        var decryptionTask = Task.Run(() =>
                        {
                            foreach (string encryptedFilePath in tempEncryptedFiles)
                            {
                                string filePath = DataCryptography.FileDecrypt(encryptedFilePath, aesKey);
                            }
                        });
                        decryptionTask.Wait();

                        LoggedUser.SetPublicKeyXmlString(String.Empty);
                        LoggedUser.SetAesKey(aesKey);

                        IOClass.SaveFilesList(Files, this.UserFilesFilepath);
                        IOClass.SaveFilesList(EncryptedFiles, this.UserEncryptedFilesFilepath);
                        IOClass.SaveFoldersList(Folders, this.UserFoldersFilepath);
                        IOClass.SaveTrustedDevicesList(TrustedDevices, this.UserKeyDataFilepath);
                        IOClass.UpdateUser(LoggedUser);

                        bindFilesListBox();
                        bindFoldersListBox();

                        MessageBox.Show("Your files are decrypted now.", "Files recovery system", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                }
                else
                {
                    MessageBox.Show("Security answer or password incorrect!", "Files recovery system", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
        }
示例#2
0
        /// <summary>
        /// Creates an authentication key from selected device and saves it to the list.
        /// Adds a private key to device and public key to user data.
        /// </summary>
        /// <param name="deviceData"></param>
        /// <returns>Returns true if procedure went well</returns>
        bool addTrustedDevice(string deviceData)
        {
            // Temporary limit of trusted devices due to lack of multi-private-key system
            if (TrustedDevices.Count.Equals(0))
            {
                string[] deviceDataArray = deviceData.Split(':');
                string   deviceModel     = deviceDataArray[0].Trim();
                string   deviceName      = deviceDataArray[1].Trim();

                foreach (var device in ConnectedDevices)
                {
                    if (device.VolumeName.Equals(deviceName) && device.Model.Equals(deviceModel))
                    {
                        TrustedDevices.Add(device);
                        string publicKeyString, privateKeyString;
                        (publicKeyString, privateKeyString) = DataCryptography.GenerateRsaKeys();
                        string aesKey          = LoggedUser.GetAesKey();
                        string encryptedAesKey = DataCryptography.EncryptAESKey(aesKey, publicKeyString);

                        if (IOClass.SaveTrustedDevicesList(TrustedDevices, this.UserKeyDataFilepath) &&
                            IOClass.SavePrivateKeyOnDevice(device.Path, privateKeyString))
                        {
                            LoggedUser.SetPublicKeyXmlString(publicKeyString);
                            LoggedUser.SetAesKey(encryptedAesKey);
                            LoggedUser.SetKeysQuantity(LoggedUser.GetKeysQuantity() + 1);
                            IOClass.UpdateUser(LoggedUser);
                            break;
                        }
                        else
                        {
                            MessageBox.Show("Couldn't create an authentication key.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                }
                return(true);
            }
            else
            {
                MessageBox.Show("You already have your trusted device. Couldn't create another one.", "Information", MessageBoxButton.OK, MessageBoxImage.Information);
                return(false);
            }
        }
示例#3
0
        /// <summary>
        /// Deletes an authentication key from the list
        /// </summary>
        /// <param name="deviceData"></param>
        /// <returns></returns>
        bool deleteTrustedDevice(string deviceData)
        {
            string[] deviceDataArray = deviceData.Split(':');
            string   deviceModel     = deviceDataArray[0].Trim();
            string   deviceName      = deviceDataArray[1].Trim();

            foreach (var device in TrustedDevices)
            {
                if (device.VolumeName.Equals(deviceName) && device.Model.Equals(deviceModel))
                {
                    TrustedDevices.Remove(device);
                    if (IOClass.RemovePrivateKeyFromDevice(device.Path) &&
                        IOClass.SaveTrustedDevicesList(TrustedDevices, this.UserKeyDataFilepath))
                    {
                        LoggedUser.SetPublicKeyXmlString(null);
                        LoggedUser.SetAesKey(String.Empty);
                        LoggedUser.SetKeysQuantity(LoggedUser.GetKeysQuantity() - 1);
                        IOClass.UpdateUser(LoggedUser);
                        return(true);
                    }
                }
            }
            return(false);
        }