You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift iOS开发:PBKDF2导出密钥配CryptoKit加密报错求助

解决CryptoKit中PBKDF2导出密钥后AES.GCM加密报incorrectKeySize错误的问题

你遇到的问题核心是对PBKDF导出密钥时的derivedKeyLength参数单位理解错误:IDZSwiftCommonCrypto的PBKDF.deriveKey方法中,derivedKeyLength的单位是字节,你传入的256会生成256字节的密钥,远超过AES-256所需的32字节(256比特),导致CryptoKit报错。

你的原代码:

let derivedKey: [UInt8] = PBKDF.deriveKey(password: password, salt: salt, prf: PBKDF.PseudoRandomAlgorithm.sha256, rounds: 320000, derivedKeyLength: 256)
let keyAsData = Data(derivedKey)      
let nonce = AES.GCM.Nonce()
let key = SymmetricKey(data: keyAsData)
let sealedBox = try AES.GCM.seal(data, using: key, nonce: nonce)

修正方法很简单,将derivedKeyLength改为32(因为256比特 = 32字节),这样导出的密钥长度就符合AES-256的要求了:

// 修正derivedKeyLength为32字节(对应256比特)
let derivedKey: [UInt8] = PBKDF.deriveKey(password: password, salt: salt, prf: PBKDF.PseudoRandomAlgorithm.sha256, rounds: 320000, derivedKeyLength: 32)
let keyAsData = Data(derivedKey)      
let nonce = AES.GCM.Nonce()
let key = SymmetricKey(data: keyAsData)
// 可选:验证密钥大小是否正确
assert(key.size == .bits256, "密钥长度不符合AES-256要求")
let sealedBox = try AES.GCM.seal(data, using: key, nonce: nonce)

你之前用SymmetricKey(size: .bits256)能正常加密,是因为这个方法会直接创建32字节的标准AES-256密钥,长度完全匹配CryptoKit的要求。

内容的提问来源于stack exchange,提问作者Enric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:19:58