项目接口需要加密,使用到了AES/GCM/NoPadding,这边使用了CryptoSwift进行加密解密,但是测试下来我这边的加密结果和后端的加密结果对比少了24位,查询资料,因为 GCM 模式默认会生成一个 16 字节(128 位)的认证标签(authentication tag),这个标签通常会附加在加密后的密文后面,用于解密时的完整性验证。
/** AES加密**/
static func getContentStr(inputStr: String) -> String {
var contentStr = ""
PrintLog("===AES加密前=====\(inputStr)")
do {
// 密钥
let aesKey = "---自己的aeskey--"
let gcm = GCM(iv: AESIV, mode: .combined)
let aes = try! AES(key: aesKey.bytes, blockMode: gcm, padding: .noPadding)
let encodeStr = try aes.encrypt(inputStr.bytes)
contentStr = "\(encodeStr.toBase64())"
} catch {
PrintLog(error)
}
return contentStr
}
AESIV是自己向量,格式为UInt8 ,设置时GCM(iv: AESIV, mode: .combined) mode需要设置为combined,如果不设置combined,结果会比后端的少24位