[swift] Swift CryptoSwift로 블록 암호화하기

블록 암호화는 데이터를 고정된 크기의 블록으로 나누어 암호화하는 암호화 방식입니다. Swift에서는 CryptoSwift 라이브러리를 사용하여 간단하게 블록 암호화를 구현할 수 있습니다. 이번 포스트에서는 CryptoSwift를 사용하여 블록 암호화를 수행하는 방법을 알아보겠습니다.

CryptoSwift 설치하기

CryptoSwift는 Swift 언어로 작성된 암호화 라이브러리입니다. 이 라이브러리는 Swift Package Manager를 통해 손쉽게 설치할 수 있습니다. 아래 명령어를 사용하여 CryptoSwift를 프로젝트에 추가해주세요.

$ swift package init --type executable
$ echo 'import PackageDescription
let package = Package(
    name: "MyProject",
    dependencies: [
        .package(url: "https://github.com/krzyzanowskim/CryptoSwift.git", from: "1.3.2"),
    ],
    targets: [
        .target(
            name: "MyProject",
            dependencies: ["CryptoSwift"]),
    ]
)' > Package.swift
$ swift build

암호화하기

다음은 CryptoSwift를 사용하여 블록 암호화를 수행하는 간단한 예제입니다. AES 암호화를 사용하여 텍스트를 암호화하고 복호화하는 과정을 보여줍니다.

import CryptoSwift

let key: [UInt8] = // 암호화에 사용할 키
let iv: [UInt8] = // 초기화 벡터

func encrypt(plaintext: String) throws -> String {
    guard let data = plaintext.data(using: .utf8) else {
        throw CryptoError.invalidPlaintext
    }
    
    let encrypted = try AES(key: key, blockMode: CBC(iv: iv), padding: .pkcs7).encrypt(data.bytes)
    return Data(encrypted).base64EncodedString()
}

func decrypt(ciphertext: String) throws -> String {
    guard let data = Data(base64Encoded: ciphertext) else {
        throw CryptoError.invalidCiphertext
    }
    
    let decrypted = try AES(key: key, blockMode: CBC(iv: iv), padding: .pkcs7).decrypt(data.bytes)
    return String(bytes: decrypted, encoding: .utf8) ?? ""
}

enum CryptoError: Error {
    case invalidPlaintext
    case invalidCiphertext
}

// 사용 예시
do {
    let plaintext = "Hello, CryptoSwift!"
    let ciphertext = try encrypt(plaintext: plaintext)
    let decryptedText = try decrypt(ciphertext: ciphertext)
    
    print("평문: \(plaintext)")
    print("암호문: \(ciphertext)")
    print("복호문: \(decryptedText)")
} catch {
    print("오류 발생: \(error.localizedDescription)")
}

위 예제에서는 AES 암호화 알고리즘을 사용하고 있습니다. key 변수에 암호화에 사용할 키를, iv 변수에 초기화 벡터를 설정해야 합니다. encrypt 함수는 주어진 평문을 암호화하여 Base64로 인코딩된 문자열로 반환하고, decrypt 함수는 주어진 암호문을 복호화하여 원래의 평문을 반환합니다.

마무리

이번 포스트에서는 CryptoSwift를 사용하여 Swift에서 블록 암호화를 수행하는 방법을 알아보았습니다. CryptoSwift는 간단하고 강력한 암호화 기능을 제공하여 개발자들이 쉽게 암호화를 구현할 수 있도록 도와줍니다. 보안이 중요한 애플리케이션을 개발하거나 데이터를 암호화해야 하는 경우 CryptoSwift를 사용해보세요.

참고 자료