Для работы с шифрованием файлов создайте приложение «HHFWFilesEncrypted», в котором используются методы фреймворка:
Имя метода | Краткое описание |
initWithCredentials (_: host: environment: project: device:) | Метод выполняет инициализацию фреймворка. |
auth (_: password:) | Метод выполняет аутентификацию пользователя по логину и паролю. |
getFile (_: fromServerPath: mountName: password: handler:) | Метод скачивает файл с сервера мобильной платформы. |
putFile (_: toServerPath: mountName: password: handler:) | Метод загружает файл на сервер мобильной платформы. |
decryptFileToString(_: withPassword:) | Метод расшифровывает файл в строку. |
decryptFile(_: toFile: withPassword:) | Метод расшифровывает файл в новый файл. |
decryptFileToData(_: withPassword:) | Метод расшифровывает файл в байтовый буфер. |
Приложение «HHFWFilesEncrypted» состоит из одного экрана, текстового поля «UITextField», текстового представления «UITextView» и кнопок «UIButton»:
«Get file». Получение файла;
«Put file». Отправление файла;
«Decrypt to string». Расшифровка файла в строку;
«Decrypt to file». Расшифровка файла в новый файл;
«Decrypt to data». Расшифровка файла в байтовый буфер.
Примечание. При загрузке приложения выполняется аутентификация, кнопки и текстовые поля недоступны. Если аутентификация выполнена успешно, то кнопки и текстовые поля будут доступны и в текстовом представлении появится надпись «Authentication success».
Для выполнения примера:
Введите название файла file.txt и ключ шифрования в текстовые поля и нажмите кнопку «Get file».
В результате будет получен указанный файл с сервера мобильной платформы, зашифрованный с указанным ключом:
Файл file.txt будет записан в папку Documents в директории мобильного приложения:
Содержимое файла зашифровано:
Создайте в папке Documents копию файла file.txt и переименуйте его в file1.txt:
Введите название файла file1.txt и ключ шифрования в текстовые поля и нажмите кнопку «Put file».
В результате будет отправлен указанный файл на сервер мобильной платформы:
Введите название файла file.txt и ключ шифрования в текстовые поля и нажмите кнопку «Decrypt to string».
В текстовом представлении отобразится результат расшифровки файла в виде строки:
Введите название файла file1.txt и ключ шифрования в текстовые поля и нажмите кнопку «Decrypt to file»:
В папке Documents в директории мобильного приложения появится файл decriptedFile.txt:
Содержимое файла decriptedFile.txt соответствует расшифрованному содержимому файла file1.txt:
Введите название файла file1.txt и ключ шифрования в текстовые поля и нажмите кнопку «Decrypt to data».
В текстовом представлении отобразится результат расшифровки файла в виде содержания байтового буфера:
Код приложения:
import UIKit
class ViewController: UIViewController {
// Объявим переменные для элементов пользовательского интерфейса
@IBOutlet weak var fileNameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var resultTextView: UITextView!
@IBOutlet weak var getFileButton: UIButton!
@IBOutlet weak var putFileButton: UIButton!
@IBOutlet weak var decryptToStringButton: UIButton!
@IBOutlet weak var decryptToFileButton: UIButton!
@IBOutlet weak var decryptToDataButton: UIButton!
// Переопределим методы жизненного цикла отображения
override func viewDidLoad() {
super.viewDidLoad()
self.deactivateButtons()
self.initializeFramework()
self.auth {
self.activateButtons()
self.resultTextView.text = "Authentication success"
}
}
// Определим методы для обработки событий, инициированных пользователем из пользовательского интерфейса
@IBAction func viewTapped(_ sender: UITapGestureRecognizer) {
self.fileNameTextField.resignFirstResponder()
}
@IBAction func getFilePressed(_ sender: UIButton) {
self.getFile { (jsonResult) in
self.resultTextView.text = String(format: "%@", jsonResult)
}
}
@IBAction func putFilePressed(_ sender: UIButton) {
self.putFile { (jsonResult) in
self.resultTextView.text = String(format: "%@", jsonResult)
}
}
@IBAction func decryptToStringPressed(_ sender: UIButton) {
self.decryptFileToString { (string) in
self.resultTextView.text = String(format: "%@", string)
}
}
@IBAction func decryptToFilePressed(_ sender: UIButton) {
self.decryptFileToFile {
self.resultTextView.text = String(format: "%@", "Decripted to file")
}
}
@IBAction func decryptToDataPressed(_ sender: UIButton) {
self.decryptFileToData { data in
self.resultTextView.text = String(format: "%@", data as NSData)
}
}
// Определим метод для инициализации фреймворка
private func initializeFramework() {
let apiVersion: String = "v1"
let host: String = "http://testmasterfmp.fsight.cloud/"
let environment: String = "viktoriia_test"
let project: String = "project"
let device: String = (UIDevice.current.identifierForVendor?.uuidString)!
HHFWController.sharedInstance().initWithCredentials(
apiVersion,
host: host,
environment: environment,
project: project,
device: device
)
}
// Определим метод для аутентификации
private func auth(completion: @escaping ()->()) {
let username: String = "test"
let password: String = "test123"
HHFWController.sharedInstance().auth(username, password: password){ (jsonResult) in
if let jsonDict = jsonResult as? NSDictionary,
let status = jsonDict["status"] as? String, status == "ok" {
print("Auth success")
completion()
} else {
print("Auth error")
}
}
}
// Определим метод для получения файла
private func getFile(completion: @escaping (NSDictionary)->()) {
guard let fileName: String = self.fileNameTextField.text else { return }
guard let password: String = self.passwordTextField.text else { return }
let mountName: String = "nfs4"
HHFWController.sharedInstance().getFile(fileName, fromServerPath: fileName, mountName: mountName, password: password) { (jsonResult) in
if let jsonDict = jsonResult as? NSDictionary,
let status = jsonDict["status"] as? String, status == "ok" {
print("Get file success")
completion(jsonDict)
} else {
print("Get file error")
}
}
}
// Определим метод для отправления файла
private func putFile(completion: @escaping (NSDictionary)->()) {
guard let fileName: String = self.fileNameTextField.text else { return }
guard let password: String = self.passwordTextField.text else { return }
let mountName: String = "nfs4"
HHFWController.sharedInstance().putFile(fileName, toServerPath: fileName, mountName: mountName, password: password) { (jsonResult) in
if let jsonDict = jsonResult as? NSDictionary,
let status = jsonDict["status"] as? String, status == "ok" {
print("Put file success")
completion(jsonDict)
} else {
print("Put file error")
}
}
}
// Определим метод для расшифровки файла в строку
private func decryptFileToString(completion: @escaping (String)->()) {
guard let fileName: String = self.fileNameTextField.text else { return }
guard let password: String = self.passwordTextField.text else { return }
let string = HHFWController.sharedInstance().decryptFileToString(fileName, withPassword: password) ?? ""
completion(string)
}
// Определим метод для расшифровка файла в новый файл
private func decryptFileToFile(completion: @escaping ()->()) {
guard let fileName: String = self.fileNameTextField.text else { return }
guard let password: String = self.passwordTextField.text else { return }
let destinationFile: String = "decriptedFile.txt"
HHFWController.sharedInstance().decryptFile(fileName, toFile: destinationFile, withPassword: password)
completion()
}
// Определим метод для расшифровка файла в байтовый буфер
private func decryptFileToData(completion: @escaping (Data)->()) {
guard let fileName: String = self.fileNameTextField.text else { return }
guard let password: String = self.passwordTextField.text else { return }
let data = HHFWController.sharedInstance().decryptFileToData(fileName, withPassword: password)
completion(data)
}
// Определим методы для изменения элементов отображения пользовательского интерфейса
private func deactivateButtons() {
self.getFileButton.isEnabled = false
self.putFileButton.isEnabled = false
self.decryptToStringButton.isEnabled = false
self.decryptToFileButton.isEnabled = false
self.decryptToDataButton.isEnabled = false
}
private func activateButtons() {
self.getFileButton.isEnabled = true
self.putFileButton.isEnabled = true
self.decryptToStringButton.isEnabled = true
self.decryptToFileButton.isEnabled = true
self.decryptToDataButton.isEnabled = true
}
}
См. также: