为什么文本加密在 Swift5 上的 CryptoSwift 中失败?

Why is text encryption failing in CryptoSwift on Swift5?

我在尝试加密我的密码时遇到错误。我找不到加密失败的原因。有什么问题吗?

加密货币

import CryptoSwift

struct Crypto {

    let keyData : String!
    let ivData : String!

    init(){
        keyData = "Stringdata"
        ivData = "Stringdata"
    }

    func encryptor(_ text: String) {
        do {
            let aes = try AES(key: keyData, iv: ivData)
            let chiperText = try aes.encrypt(text.bytes).toBase64() // get Error
            Log.Debug(chiperText)
        } catch {
            Log.Error(error)
        }
    }

    func decryptor(_ hexString : String) -> String {
        var decryptText : String = ""
        do {
            let aes = try AES(key: keyData, iv: ivData)
            let e64_data = Data(base64Encoded: hexString) ?? Data()
            let decryptData = try aes.decrypt(e64_data.bytes)
            decryptText = String(bytes: decryptData, encoding: .utf8)!
            Log.Debug(decryptText)
        } catch {
            Log.Error(error)
        }
        return decryptText
    }

}

用法

do {
            try globalUrl.post(url: url, dict, encoding: .utf8, completionHandler: { data, response, error in
   do {
      ...
      Crypto.encryptor(self.PasswordField.text!)
       ...
   } catch {
      Log.Error(error)
   }
} catch {
      Log.Error(error)
   }

你运行的地方是运行在你通过API

收到return值的地方

let chiperText = try aes.encrypt(text.bytes).toBase64()

这是错误发生的地方。我不知道为什么,因为我已经报告了如何使用 Github.


编辑


我打算尝试另一种加密方式,但我不知道如何解码。

    func encryptor(_ text: String) {
        do {
            let aes = try AES(key: keyData, iv: ivData) // aes128
            let ciphertext = try aes.encrypt(Array(text.utf8))
            Log.Debug(ciphertext)
        } catch {
            Log.Error(error)
        }
    }

    func decryptor(_ dataArray : Array<UInt8>) -> String {
        var decryptText : String = ""
        do {
            let aes = try AES(key: keyData, iv: ivData) // aes128
            let ciphertext = try aes.decrypt(dataArray)
            decryptText = ciphertext // Cannot assign value of type '[UInt8]' to type 'String'
            Log.Debug(decryptText)
        } catch {
            Log.Error(error)
        }
        return decryptText
    }

decryptText = ciphertext // Cannot assign value of type '[UInt8]' to type 'String'

我的用法有误吗?无论我如何努力寻找解决方案,我都找不到。

提前致谢

这个错误发生在一个简单的地方。 ivDatakeyData 的字节值不是 16 字节。如果它们的值不是 16 字节,则会发生错误。