[swift] CryptoSwift의 AES 암호화 기능 설명

AES(Advanced Encryption Standard)은 현재 가장 널리 사용되고 안전한 대칭키 알고리즘 중 하나입니다. 이 알고리즘을 사용하여 데이터를 암호화하고 복호화하는 작업은 많은 애플리케이션에서 필요한 보안 기능입니다. 이번 포스트에서는 CryptoSwift 라이브러리를 사용하여 AES 암호화를 어떻게 수행할 수 있는지 알아보겠습니다.

CryptoSwift 설치

CryptoSwift 라이브러리를 사용하기 위해서는 먼저 프로젝트에 해당 라이브러리를 추가해야 합니다. 스위프트 패키지 매니저를 사용한다면, Package.swift 파일에 아래와 같이 의존성을 추가할 수 있습니다:

dependencies: [
    .package(url: "https://github.com/krzyzanowskim/CryptoSwift.git", from: "1.4.0")
]

또는 CocoaPods를 사용한다면, Podfile에 다음과 같이 추가할 수 있습니다:

pod 'CryptoSwift', '~> 1.4.0'

설치가 완료되면, import CryptoSwift 문을 사용하여 CryptoSwift 라이브러리를 프로젝트에 가져올 수 있습니다.

AES 암호화와 복호화

CryptoSwift를 사용하여 AES 암호화 및 복호화를 수행하는 것은 꽤 간단합니다. 다음은 AES-128 ECB 모드로 암호화하는 예제 코드입니다:

import CryptoSwift

func encryptAES(data: Data, key: [UInt8], iv: [UInt8]) throws -> Data {
    let aes = try AES(key: key, blockMode: ECB(), padding: .pkcs7)
    let encrypted = try aes.encrypt(data.array)
    return Data(encrypted)
}

let plaintext = "Hello, World!".data(using: .utf8)!
let key: [UInt8] = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10]
let iv: [UInt8] = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F]

do {
    let encryptedData = try encryptAES(data: plaintext, key: key, iv: iv)
    let encryptedString = encryptedData.base64EncodedString()
    print("Encrypted: \(encryptedString)")
} catch {
    print("Failed to encrypt: \(error)")
}

위의 코드에서 encryptAES 함수는 주어진 데이터를 AES 알고리즘을 사용하여 암호화합니다. keyiv는 각각 암호화 및 복호화에 사용될 키와 초기화 벡터입니다. 암호화된 데이터는 Base64로 인코딩되어 반환됩니다.

암호화된 데이터를 복호화하는 예제 코드는 아래와 같습니다:

func decryptAES(data: Data, key: [UInt8], iv: [UInt8]) throws -> Data {
    let aes = try AES(key: key, blockMode: ECB(), padding: .pkcs7)
    let decrypted = try aes.decrypt(data.array)
    return Data(decrypted)
}

let encryptedData = Data(base64Encoded: "CYy2GF0UTEr4C7HI29t3qA==")!
do {
    let decryptedData = try decryptAES(data: encryptedData, key: key, iv: iv)
    let decryptedString = String(data: decryptedData, encoding: .utf8)!
    print("Decrypted: \(decryptedString)")
} catch {
    print("Failed to decrypt: \(error)")
}

위의 코드에서는 decryptAES 함수를 사용하여 암호화된 데이터를 복호화합니다. 암호화할 때 사용한 keyiv를 동일하게 제공해야 합니다. 복호화된 데이터는 원래의 문자열로 변환되고 출력됩니다.

여기서는 ECB 모드를 사용하여 암호화 및 복호화를 수행했지만, 다른 블록 암호화 모드(e.g., CBC, CTR)를 사용할 수도 있습니다. CryptoSwift는 다양한 블록 암호화 모드를 제공하므로 필요에 따라 선택할 수 있습니다.

CryptoSwift는 AES 암호화 외에도 다른 암호화 알고리즘과 해시 함수를 지원합니다. 더 자세한 내용은 CryptoSwift GitHub 페이지에서 확인할 수 있습니다.

이상으로 CryptoSwift 라이브러리를 사용하여 AES 암호화 기능을 발표하였습니다. 기존의 CoreCrypto 기반의 암호화보다 쉽고 간편하게 암호화 기능을 구현할 수 있는 CryptoSwift를 활용해보시기 바랍니다.