import CryptoSwift
// AES256 복호화 기능
func decryptAES256(key: Data, iv: Data, data: Data?) -> String {
if let validData = data {
let bytes = validData.bytes
let keyDecodes : Array<UInt8> = Array(key)
let ivDecodes : Array<UInt8> = Array(iv)
do {
let aesObject = try AES(key: keyDecodes, blockMode: CBC(iv: ivDecodes), padding: .pkcs5)
let decode = try aesObject.decrypt(bytes)
let base64Data = Data(bytes: decode, count: decode.count)
let decryptedData = String(decoding: base64Data, as: UTF8.self)
return decryptedData
} catch(let error) {
Logger.error("Failed to create AES Object error: \(error)")
return ""
}
} else {
Logger.error("data is Invalid. data: \(String(describing: data))")
return ""
}
}
let data = Data(base64Encoded: response.data ?? Data(), options: .ignoreUnknownCharacters) ?? Data()
if let key = Data(base64Encoded: base64key, options: .ignoreUnknownCharacters) {
if let iv = ivString.data(using: .utf8) {
print(decryptAES256(key: key, iv: iv, data: data))
)
} else {
Logger.error("AES256 Decryption iv to Data conversion Failed")
}
} else {
Logger.error("AES256 Decryption key to Data conversion Failed")
}
위 코드는 다음과 같은 조건을 전제로 한다.
1. key는 base64로 encoding된 string을 갖고 있다.
2. iv는 key(base64로 encoding된 string) 자체에서 앞에서부터 16글자를 utf8 encoding의 Data
자료형으로 변환하여 사용한다.
3. 복호화하려는 Data는 AES256으로 encoding 되어있다.