3

我正在集成 CryptoSwift 并发现此错误“成员 'CBC' 没有参数”。

我正在调用这样的函数

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

3 回答 3

4

对不起,我有点晚了,但是在运行后遇到了这个问题pod update。我和你做的一样,我的项目在更新后中断了,因为新的 API 引入了不向后兼容的更改。要回答您的问题,现在 CBC 不是 BlockMode 枚举的成员,因此使用新 API 编写等效代码的正确方法是:

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

于 2018-08-29T22:21:29.320 回答
0

如果您正在查看第 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。

于 2017-12-12T10:15:17.007 回答
0

对于 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())
于 2018-02-07T02:39:47.093 回答