我正在集成 CryptoSwift 并发现此错误“成员 'CBC' 没有参数”。
我正在调用这样的函数
let enc = try! AES(key: key, blockMode: .CBC(iv: iv)).encrypt(self.arrayOfBytes())
我正在集成 CryptoSwift 并发现此错误“成员 'CBC' 没有参数”。
我正在调用这样的函数
let enc = try! AES(key: key, blockMode: .CBC(iv: iv)).encrypt(self.arrayOfBytes())
对不起,我有点晚了,但是在运行后遇到了这个问题pod update
。我和你做的一样,我的项目在更新后中断了,因为新的 API 引入了不向后兼容的更改。要回答您的问题,现在 CBC 不是 BlockMode 枚举的成员,因此使用新 API 编写等效代码的正确方法是:
let enc = try! AES(key: key, blockMode: CBC(iv: iv)).encrypt(self.arrayOfBytes())
如果您正在查看第 3 版的 CryptoSwift API,您将获得以下 AES 初始化程序:
public init(key: Array<UInt8>, iv: Array<UInt8>? = nil, blockMode: BlockMode = .CBC, padding: Padding = PKCS7()) throws {
正如你所看到的,iv
这里不是 CBC 的参数——它应该是——而是分组密码本身的参数。你应该升级到 Swift 4 或者你应该坚持旧的 API。
对于 Swift 3.2,您应该检查 API 使用的正确 README,因为 API 会随着时间而改变。
这是 Swift 3.2(swift32 分支)的 README: https ://github.com/krzyzanowskim/CryptoSwift/tree/swift32#aes-advanced-usage
要回答这个问题,这是满足您需求的正确形式:
try AES(key: key, iv: iv, blockMode: .CBC, padding: PKCS7())