簡體   English   中英

如何使用 AES-256 加密對整個文件進行加密?

[英]How to encrypt whole file using AES-256 encryption?

我的包中有一個 SQL 數據庫文件。 我需要使用 AES-256 加密該文件,並需要將此數據寫入另一個文件。

我已經嘗試過使用 RNCryptor 和 CryptoSwift,但是,我要為我的問題找到確切的解決方案。

只需將任何文件讀取為DataNSData實例並對其應用加密並使用自定義擴展回寫可能是..您可以使用@Ashish Rana 或https://gist.github.com/hfossli/7165dc023a10046e2322b0ce74c596f8建議的庫

  1. 從文件guard let fileURL = Bundle.main.url(forResource: "file-to-be-encrypted", withExtension: "txt") else { return }加載數據guard let fileURL = Bundle.main.url(forResource: "file-to-be-encrypted", withExtension: "txt") else { return } guard let fileData = try? Data(contentsOf: fileURL) else { return } guard let fileData = try? Data(contentsOf: fileURL) else { return }

  2. 應用加密let encrypted = try aes.encrypt(digest)

  3. 將加密文件保存回try encrypted.write(to: encURL)

如果您不想共享加密文件而只想保護它,那么您可以使用此處提到的操作系統基礎加密:https ://www.tomsguide.com/us/how-to-encrypt-ios,news-18338 .html

使用AES256CrypterRijndael ,我得到了 AES-256 加密和解密。

從此鏈接添加代碼: https : //github.com/superk589/RijndaelSwift

class StringCipher {

    static func Encrypt(plainText : String,  passPhrase : String) -> String {

        var result = ""
        let salt = AES256Crypter.randomSalt()
        let iv = AES256Crypter.randomSalt()

        let saltByte = [UInt8](salt)
        let ivByte = [UInt8](iv)
        do {
            let key = try AES256Crypter.createKey(password: passPhrase.data(using: .utf8)!, salt: salt)
            let r = Rijndael(key: key, mode: .cbc)!
            let decryptedData = r.encrypt(data: plainText.trimmed().data(using: .utf8)!, blockSize: 32, iv: iv)
            let dataBypte = [UInt8](decryptedData!)
            let mainByte = saltByte + ivByte + dataBypte
           // print(mainByte.count)

            let plainData = Data(bytes: mainByte)
            result = (plainData.base64EncodedString())
           // print(result)
        }
        catch {
            print("Failed")
            print(error)
        }
        return result
    }
    static func Decrypt( cipherText : String,  passPhrase : String) -> String {

        var result = ""

        do {
            let bData = cipherText.data(using: .utf8)!
            if let nsData = NSData(base64Encoded: cipherText, options: .ignoreUnknownCharacters) {
                let bytes = [UInt8](nsData as Data)
               // print(bytes, String(bytes: bytes, encoding: .utf8))
               // print(bytes.count)
                let subArray1 = bytes[0...31]
                let subArray2 = bytes[32...63]
                let subArray3 = bytes[64...(bytes.count-1)]

                let saltData = Data(bytes: subArray1)
                let ivData = Data(bytes: subArray2)
                let plainData = Data(bytes: subArray3)

               /*
                print("salt === \(saltData.base64EncodedString())\n\n")
                print("IV === \(ivData.base64EncodedString())\n\n")
                print("Data === \(plainData.base64EncodedString())\n\n")
                */

                let key = try AES256Crypter.createKey(password: passPhrase.data(using: .utf8)!, salt: saltData)
                print(key.count)

                let r = Rijndael(key: key, mode: .cbc)!

                let decryptedData = r.decrypt(data: plainData, blockSize: 32, iv: ivData)
              //  print("Original: \(String(decoding: decryptedData!, as: UTF8.self))")
                result = (String(decoding: decryptedData!, as: UTF8.self)).trimmed()

            }

        } catch {
            print("Failed")
            print(error)
        }
        return result
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM