会员' CBC'没有参数

时间:2017-12-12 06:49:38

标签: swift cryptography cryptoswift

我正在整合CryptoSwift并发现了这个错误"会员' CBC'没有参数"。

我正在调用这个函数

let enc = try! AES(key: key, blockMode: .CBC(iv: iv)).encrypt(self.arrayOfBytes())

3 个答案:

答案 0 :(得分:2)

对不起,我来晚了,但是在运行pod update之后才遇到此问题。我所做的事情与您相同,更新后我的项目也中断了,因为新的API引入了不向后兼容的更改。为了回答您的问题,现在CBC不是BlockMode枚举的成员,因此使用新API编写等效代码的正确方法是:

let enc = try! AES(key: key, blockMode: CBC(iv: iv)).encrypt(self.arrayOfBytes())

答案 1 :(得分:0)

如果您是looking at the CryptoSwift API for version 3,则会获得以下AES初始化程序:

public init(key: Array<UInt8>, iv: Array<UInt8>? = nil, blockMode: BlockMode = .CBC, padding: Padding = PKCS7()) throws {

正如你所看到的,iv这里不是CBC的参数 - 应该是 - 而是块密码本身。您应该升级到Swift 4,或者您应该遵循较旧的API。

答案 2 :(得分:0)

对于Swift 3.2,您应该检查API使用情况的正确README,因为API会随着时间的推移而发生变化。

这是Swift 3.2的自述文件(swift32分支):  https://github.com/krzyzanowskim/CryptoSwift/tree/swift32#aes-advanced-usage

要回答这个问题,这是满足您需求的正确形式:

try AES(key: key, iv: iv, blockMode: .CBC, padding: PKCS7())