Firebase / Swift搜索加密数据?

时间:2017-10-13 09:47:20

标签: ios swift encryption firebase-realtime-database rncryptor

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,但这不是问题。加密后,输出如下所示..

Output

正如您所看到的,有些数据是加密的,有些则不是。正如计划的那样。

现在我需要在应用中搜索数据。为此,我做了一个搜索功能,其中包括:

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!

0 个答案:

没有答案