[swift] Swift에서의 블록 암호화 모드 활용 방법

암호화는 데이터의 보안을 위해 필수적인 기능입니다. Swift에서는 CryptoKit 프레임워크를 사용하여 다양한 암호화 작업을 수행할 수 있습니다. 이 중에서도 블록 암호화 모드는 자주 사용되며, AES-GCM, AES-CBC 등 다양한 알고리즘을 지원합니다.

AES-GCM 모드로 암호화하기

AES-GCM은 인증 기능과 함께 암호화를 제공하는 블록 암호화 모드입니다. 다음 예제는 AES-GCM 모드로 데이터를 암호화하는 방법을 보여줍니다.

import CryptoKit

// 암호화할 데이터
let plainText = "암호화될 메시지"

// 256비트 암호화 키
let keyData = SymmetricKey(size: .bits256)

do {
    // CipherText, Additional 데이터, 태그 생성
    let sealedBox = try AES.GCM.seal(
        plainText.data(using: .utf8)!,
        using: keyData
    )
    
    // 암호화된 데이터를 Base64로 인코딩하여 출력
    let encryptedText = sealedBox.ciphertext.base64EncodedString()
    print("암호화된 메시지: \(encryptedText)")
    
    // 만들어진 태그를 Base64로 인코딩하여 출력
    let tag = sealedBox.tag.base64EncodedString()
    print("태그: \(tag)")
    
} catch {
    print("암호화 실패: \(error)")
}

AES-CBC 모드로 암호화하기

AES-CBC 모드는 블록 암호화 중에서도 가장 일반적으로 사용되는 모드입니다. 다음은 AES-CBC 모드로 데이터를 암호화하는 예제입니다.

import CryptoKit

// 암호화할 데이터
let plainText = "암호화될 메시지"

// 256비트 암호화 키
let keyData = SymmetricKey(size: .bits256)

do {
    // 초기화 벡터 생성
    let ivData = AES.randomIV(size: .aes128)
    
    // CipherText 생성
    let cipherText = try AES.CBC.encrypt(
        plainText.data(using: .utf8)!,
        using: keyData,
        iv: ivData
    )
    
    // 암호화된 데이터를 Base64로 인코딩하여 출력
    let encryptedText = cipherText.base64EncodedString()
    print("암호화된 메시지: \(encryptedText)")
    
} catch {
    print("암호화 실패: \(error)")
}

참고자료