Swift 成员';CBC&x27;不需要争论

Swift 成员';CBC&x27;不需要争论,swift,cryptography,cryptoswift,Swift,Cryptography,Cryptoswift,我正在集成CryptoSwift并发现此错误“成员‘CBC’不带参数” 我这样调用函数 let enc = try! AES(key: key, blockMode: .CBC(iv: iv)).encrypt(self.arrayOfBytes()) 如果您需要AES,请使用以下初始值设定项: public init(key: Array<UInt8>, iv: Array<UInt8>? = nil, blockMode: BlockMode = .CBC, pad

我正在集成CryptoSwift并发现此错误“成员‘CBC’不带参数”

我这样调用函数

let enc = try! AES(key: key, blockMode: .CBC(iv: iv)).encrypt(self.arrayOfBytes())
如果您需要AES,请使用以下初始值设定项:

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

如您所见,这里的
iv
不是CBC的参数(应该是),而是分组密码本身的参数。您应该升级到Swift 4或坚持使用旧的API。

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

以下是Swift 3.2(swift32分支)的自述文件:

为了回答这个问题,这是适合您需求的适当形式:

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

很抱歉,我迟到了一点,但是在运行
pod update
后遇到了这个问题。我和您做的一样,我的项目在更新后也中断了,因为新的API引入了不向后兼容的更改。为了回答您的问题,现在CBC不是BlockMode枚举的成员,所以正确的方法是编写等效的c使用新API的ode是:


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

你能告诉我们变量是如何初始化的,你使用的是哪个版本的Swift和CryptoSwift吗?我使用的是Swift 3.2和CryptoSwift 0.7.0最好避免使用CryptoSwift,除此之外,它比普通的基于加密的实现慢500到1000倍。苹果的普通加密是经过FIPS认证的,因此有b即使经过充分审查,使用CryptoSwift在正确性和安全性(如定时和电源攻击)方面也在冒险。