[Swift] AES256 복호화

준수·2022년 9월 8일
0
post-thumbnail

1. 함수

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 ""
    }
    
}

2. 사용부

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")
}

3. 주의사항

위 코드는 다음과 같은 조건을 전제로 한다.
1. key는 base64로 encoding된 string을 갖고 있다.
2. iv는 key(base64로 encoding된 string) 자체에서 앞에서부터 16글자를 utf8 encoding의 Data 자료형으로 변환하여 사용한다.
3. 복호화하려는 Data는 AES256으로 encoding 되어있다.

profile
🤭Swift My Velog🤭

0개의 댓글