由于base64编码的aesKey和aesIV,CryptoSwift抛出invalidKeySize

问题描述

我有一个从API检索数据并在应用程序中显示的项目。但是API使用AES加密,我有aesKey和aesIV密钥,这些密钥是base64编码的。我需要用这些键编码另一个字符串。为此,我使用了CryptoSwift库,但是当我尝试使用此密钥来加密字符串时,swift控制台会警告我有关invalidKeySize的问题。我试图将base64解码为字符串,但效果不佳。这些是示例的键;

密钥和IV的大小为AES256,为了进行加密和解密,我需要使用具有ECB / CBC块模式的PKCS7填充类型

aesKey = lHLBfVxlGoKoaCqWORJEHh3jOvC2EBx2VHGyNAdqYV0=
aesIV = 2spaSfljZ/cunRbuVkdphQ==

and CryptoSwift code block is:

let aes = try AES(key: "\(aesKeyString)",iv: "\(aesIVString)")
let cipherText = try aes.encrypt(Array("all".utf8))

解决方法

摘录中的aesKeyaesIV是Base64编码的,因此在该形式中并没有太大用处。您使用的便捷初始化程序用于字符串,而不是您提供的base64编码数据(碰巧是字符串,但有所不同)。

let aesKey = "lHLBfVxlGoKoaCqWORJEHh3jOvC2EBx2VHGyNAdqYV0="
let key = [UInt8](base64: aesKey)

let aesIV = "2spaSfljZ/cunRbuVkdphQ=="
let iv = [UInt8](base64: aesIV)

let aes = try AES(key: key,blockMode: CBC(iv: iv))
let cipherText = try aes.encrypt(Array("all".utf8))