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
相关产品推荐
相关产品推荐

