HELP!
我正在使用xcode 8和swift。我制作了这个应用程序,它可以将数据上传到firebase,其中一些数据是加密的。 在我进行加密之前,我做了一个搜索功能,可以很好地搜索所有数据。现在我已经将加密添加到某些数据中,我无法搜索加密数据。因此我需要在搜索之前对其进行解密,但我不知道该怎么做。
如果我们一步一步地采取它......
使用RNCryptor和Cryptoswift进行加密。 在我的一个viewControllers中,我创建了一个扩展字符串,其中2函数是:
extension String{
func aesEncrypt(key: String, iv: String) throws -> String {
let data = self.data(using: .utf8)!
let encrypted = try! AES(key: key, iv: iv, blockMode: .CBC, padding: PKCS7()).encrypt([UInt8](data))
let encryptedData = Data(encrypted)
return encryptedData.base64EncodedString()
}
func aesDecrypt(key: String, iv: String) throws -> String {
let data = Data(base64Encoded: self)!
let decrypted = try! AES(key: key, iv: iv, blockMode: .CBC, padding: PKCS7()).decrypt([UInt8](data))
let decryptedData = Data(decrypted)
return String(bytes: decryptedData.bytes, encoding: .utf8) ?? "Could not decrypt"
}
}
首先我加密并上传数据:
//Krypterer data
let input = Personnr.text
let input2 = Korekort.text
let key = key1
let iv = key
let en = try! input!.aesEncrypt(key: key!, iv: iv!)
ePersonnr = en
let en2 = try! input2!.aesEncrypt(key: key!, iv: iv!)
eKorekortnr = en2
//Samler alt data om bruger
let data = ["Navn": Navn.text!,
"Telefonnr": Telefonnr.text!,
"Personnr": ePersonnr!,
"Kørekortnr": eKorekortnr!,
"Bil": Bil.text!,
"Interesse": Interesse.text!]
//Oploader til database
self.ref.child("Buyers").child(ePersonnr!).setValue(data)
我从数据库获得加密的密钥和iv,但这不是问题。加密后,输出如下所示..
正如您所看到的,有些数据是加密的,有些则不是。正如计划的那样。
现在我需要在应用中搜索数据。为此,我做了一个搜索功能,其中包括:
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
if searchController.isActive && searchController.searchBar.text != "" {
return filteredUsers.count
}
return self.usersArray.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
// Configure the cell...
let user : NSDictionary?
if searchController.isActive && searchController.searchBar.text != "" {
user = filteredUsers[indexPath.row]
}
else
{
user = self.usersArray[indexPath.row]
}
cell.textLabel?.text = user?["Navn"] as? String
cell.detailTextLabel?.text = user?["Telefonnr"] as? String
return cell
}
func filterUsers (searchText:String) {
self.filteredUsers = self.usersArray.filter{ user in
var fNavn = false
var personNr = false
var searchBil = false
var telefonNr = false
var korekortNr = false
if let Navn = user!["Navn"] as? String {
fNavn = Navn.lowercased().contains(searchText.lowercased())
}
if let Bil = user!["Bil"] as? String {
searchBil = Bil.lowercased().contains(searchText.lowercased())
}
//Decryption of data
if let Personnr = user![self.Personnr!] as? String {
personNr = Personnr.lowercased().contains(searchText.lowercased())
}
if let Kørekortnr = user!["Kørekortnr"] as? String {
korekortNr = Kørekortnr.lowercased().contains(searchText.lowercased())
}
if let Telefonnr = user!["Telefonnr"] as? String {
telefonNr = Telefonnr.lowercased().contains(searchText.lowercased())
}
return fNavn || personNr || searchBil || korekortNr || telefonNr
}
tableView.reloadData()
}
问题在于,因为数据是加密的,所以我只能搜索加密的字符串,这个字符串现在是加密的字符串的值。 因此,我需要做一些事情,这允许我在搜索之前解密数据?
为此,我需要帮助。
如果您需要任何其他信息或者可能不了解某些代码,请告知我们。
我希望你能提供帮助。
HELP!