[swift] Swift CryptoSwift로 암호화된 데이터 전송하기

암호화된 데이터를 안전하게 전송하기 위해서는 암호화와 복호화 기술이 필요합니다. Swift에서는 CryptoSwift 라이브러리를 사용하여 데이터를 암호화하고 복호화할 수 있습니다. 이번 블로그 포스트에서는 Swift CryptoSwift를 사용하여 데이터를 암호화하고 전송하는 방법에 대해 알아보겠습니다.

1. CryptoSwift 라이브러리 설치하기

먼저, CryptoSwift 라이브러리를 설치해야 합니다. CryptoSwift를 사용하기 위해서는 Swift 패키지 매니저(Swift Package Manager)를 통해 라이브러리를 설치해야 합니다. 아래의 명령어를 사용하여 CryptoSwift를 프로젝트에 추가합니다.

$ swift package init --type executable
$ swift package update
$ swift package resolve

2. 데이터 암호화하기

CryptoSwift를 사용하여 데이터를 암호화하기 위해서는 우선 암호화할 데이터를 바이트 배열(Byte Array)로 변환해야 합니다. Swift에서는 Data 타입을 사용하여 데이터를 표현할 수 있습니다. 아래의 예제 코드는 문자열을 Data 타입으로 변환하는 방법을 보여줍니다.

import CryptoSwift

let message = "Hello, World!"
guard let data = message.data(using: .utf8) else {
    print("Failed to convert message to data format")
    return
}

데이터를 암호화하려면 암호화할 키도 필요합니다. CryptoSwift는 다양한 암호화 알고리즘을 지원하며, 각 알고리즘에 맞는 키를 생성해야 합니다. 예를 들어 AES 알고리즘을 사용한다면 128비트, 192비트 또는 256비트의 키를 사용해야 합니다.

let key = "this_is_a_secret_key"
let aes = try AES(key: key.bytes, blockMode: CBC(iv: key.bytes))
let encrypted = try aes.encrypt(data.bytes)

암호화된 데이터는 바이트 배열로 반환되며, 이를 원하는 형식으로 변환하여 전송할 수 있습니다.

3. 데이터 복호화하기

전송된 암호화된 데이터를 받아와 복호화하기 위해서는 암호화 단계에서 사용했던 키와 알고리즘을 동일하게 사용해야 합니다. 아래의 예제 코드는 암호화된 데이터를 복호화하는 방법을 보여줍니다.

let decrypted = try aes.decrypt(encrypted)
let decryptedData = Data(decrypted)

guard let decryptedMessage = String(data: decryptedData, encoding: .utf8) else {
    print("Failed to convert decrypted data to string format")
    return
}

print("Decrypted message:", decryptedMessage)

복호화된 데이터 역시 바이트 배열로 반환되며, 이를 원하는 형식으로 변환하여 사용할 수 있습니다.

4. 결과 확인하기

데이터를 암호화하고 복호화하는 과정을 거쳤으므로, 이제 실제로 데이터를 전송하여 결과를 확인해보겠습니다.

let encryptedData = Data(encrypted)

// 전송 코드 작성
// ...

// 데이터 수신 후 복호화
let receivedData = Array(encryptedData)
let decrypted = try aes.decrypt(receivedData)
let decryptedData = Data(decrypted)

guard let decryptedMessage = String(data: decryptedData, encoding: .utf8) else {
    print("Failed to convert decrypted data to string format")
    return
}

print("Received and decrypted message:", decryptedMessage)

암호화된 데이터를 수신받은 후에도 동일한 키와 알고리즘을 사용하여 데이터를 복호화할 수 있습니다. 결과를 확인해보면 전송된 데이터가 정상적으로 복호화된 메시지로 출력됩니다.

참고 자료