1.加密文件夹—加密过程
1.文件夹的创立可设置私人文件夹及加密过程:
2.拜访服务器接口,创立私人文件夹
NetworkManager.shared.createFolder(name: name, pool_name: pool_name, partition_name: partition_name, is_encrypt: is_encrypt, pwd: pwd, confirm_pwd: confirmPwd, mode: mode, auth: members) { [weak self] _ in
self?.showToast("保留胜利".localizedString)
self?.navigationController?.popViewController(animated: true)
} failureCallback: { [weak self] code, err in
self?.hideLoading()
self?.showToast(err)
}
3.创立给可拜访用户后可在该用户的文件列表内展现。
2.加密文件夹—解密过程
1.文件列表数据Model中属性is_encrypt 为 1 时,则为加密文件或文件夹
2.加密文件夹款式的辨别。
3.加密文件夹进入的逻辑如下
- tableview点击相应代理办法,具体参考MyFileViewController.swift
if file.is_encrypt == 1 {//加密文件
//存储的明码对象
let key = AreaManager.shared.currentArea.scope_token + file.path
let pwdJsonStr:String = UserDefaults.standard.value(forKey: key) as? String ?? ""
let pwdModel = PasswordModel.deserialize(from: pwdJsonStr)
if pwdModel != nil {
//计算时间差
let timeTemp = TimeTool.TimeInterval(FromTime: pwdModel!.saveTime)
if timeTemp > 72 {//大于72小时
//从新输出明码
pushToFolder(isNeedPwd: true, file: file)
}else{
//无需输出明码
pushToFolder(isNeedPwd: false, file: file)
}
}else{
//须要从新输出明码
pushToFolder(isNeedPwd: true, file: file)
}
}else{
//无需输出明码
pushToFolder(isNeedPwd: false, file: file)
}
private func pushToFolder(isNeedPwd:Bool,file:FileModel){
let vc = FolderViewController()
vc.currentPath = file.path
vc.currentPaths = ["文件",file.name]
vc.encrytRootFile = file
vc.isWriteRoot = (file.write == 1)
let key = AreaManager.shared.currentArea.scope_token + file.path
if file.is_encrypt == 1 {
vc.rootPasswordKey = key
}else{
vc.rootPasswordKey = ""
}
if isNeedPwd {
//存储文件夹根目录Key
self.tipsTestFieldAlert = TipsTestFieldAlertView.show(message: "请输出明码", sureCallback: { pwd in
print("明码是\(pwd)")
NetworkManager.shared.decryptFolder(name: file.path, password: pwd) {[weak self] response in
guard let self = self else {return}
//存储工夫和明码
let pwdModel = PasswordModel()
pwdModel.password = pwd
//以后工夫
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
pwdModel.saveTime = dateFormatter.string(from: Date())
UserDefaults.standard.setValue(pwdModel.toJSONString(prettyPrint:true), forKey: key)
//解密胜利,进入文件夹
let nav = BaseNavigationViewController(rootViewController: vc)
nav.modalPresentationStyle = .fullScreen
nav.transitioningDelegate = self.transitionUtil
self.navigationController?.present(nav, animated: true, completion: nil)
} failureCallback: { code, err in
self.showToast(err)
}
})
}else{
//无需输出明码
let nav = BaseNavigationViewController(rootViewController: vc)
nav.modalPresentationStyle = .fullScreen
nav.transitioningDelegate = transitionUtil
self.navigationController?.present(nav, animated: true, completion: nil)
}
}
- 加密文件夹进入子集目录需携带最后加密的文件,不便获取门路以及明码
-
解密过程逻辑如下:(其中规定依据本身我的项目的需要来定,本我的项目以超出72小时则主动生效为准则,所以需存储首次解密的工夫)
//存储文件夹根目录Key self.tipsTestFieldAlert = TipsTestFieldAlertView.show(message: "请输出明码", sureCallback: { pwd in print("明码是\(pwd)") NetworkManager.shared.decryptFolder(name: file.path, password: pwd) {[weak self] response in guard let self = self else {return} //存储工夫和明码 let pwdModel = PasswordModel() pwdModel.password = pwd //以后工夫 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" pwdModel.saveTime = dateFormatter.string(from: Date()) UserDefaults.standard.setValue(pwdModel.toJSONString(prettyPrint:true), forKey: key) //解密胜利,进入文件夹 let nav = BaseNavigationViewController(rootViewController: vc) nav.modalPresentationStyle = .fullScreen nav.transitioningDelegate = self.transitionUtil self.navigationController?.present(nav, animated: true, completion: nil) } failureCallback: { code, err in self.showToast(err) } })
发表回复