[swift] Swift CryptoSwift로 RSA 키 쌍 불러오기

RSA는 대표적인 공개 키 암호화 알고리즘 중 하나입니다. 기존에 생성된 RSA 키 쌍을 사용하여 암호화 및 복호화를 수행하려면 키를 불러와야 합니다. 이번 글에서는 Swift CryptoSwift 라이브러리를 사용하여 RSA 키 쌍을 불러오는 방법에 대해 알아보겠습니다.

CryptoSwift 라이브러리 설치

CryptoSwift는 Swift에서 암호화 및 해시 기능을 제공해주는 오픈 소스 라이브러리입니다. 이 라이브러리를 사용하여 RSA 키 쌍을 불러오기 위해 먼저 라이브러리를 설치해야 합니다.

  1. 프로젝트의 Podfile에 다음과 같이 CryptoSwift를 추가합니다:
pod 'CryptoSwift'
  1. 터미널에서 프로젝트 폴더로 이동한 후 pod install 명령어를 실행하여 라이브러리를 설치합니다.

RSA 키 쌍 생성 및 저장

RSA 키 쌍을 불러오기 위해 먼저 키를 생성하고 저장해야 합니다.

import CryptoSwift
import Foundation

func generateKeyPair() {
    // RSA 키 쌍 생성
    let rsa = RSA()
    let keyPair = try! rsa.generateKeyPair(size: .bits2048)

    // 개인키 (privateKey)를 PEM 형식으로 저장
    let privateKeyPEM = try! keyPair.privateKey.pemString(encoding: .pem)
    try! privateKeyPEM.write(toFile: "private_key.pem", atomically: true, encoding: .utf8)
    
    // 공개키 (publicKey)를 PEM 형식으로 저장
    let publicKeyPEM = try! keyPair.publicKey.pemString(encoding: .pem)
    try! publicKeyPEM.write(toFile: "public_key.pem", atomically: true, encoding: .utf8)
}

위 코드에서는 CryptoSwift의 RSA 클래스를 사용하여 2048비트의 RSA 키 쌍을 생성하고, 개인키와 공개키를 PEM 형식으로 저장하는 예제입니다. 생성된 개인키는 “private_key.pem” 파일로 공개키는 “public_key.pem” 파일로 저장됩니다.

RSA 키 쌍 불러오기

이제 생성된 RSA 키 쌍을 불러와서 사용할 수 있습니다.

import CryptoSwift
import Foundation

func loadKeyPair() {
    // 개인키 불러오기
    let privateKeyPEM = try! String(contentsOfFile: "private_key.pem", encoding: .utf8)
    let privateKey = try! RSA.KeyReference.pemString(privateKeyPEM, encoding: .pem)
    
    // 공개키 불러오기
    let publicKeyPEM = try! String(contentsOfFile: "public_key.pem", encoding: .utf8)
    let publicKey = try! RSA.KeyReference.pemString(publicKeyPEM, encoding: .pem)
    
    // 불러온 키 쌍 확인
    print("Loaded private key: \(privateKey)")
    print("Loaded public key: \(publicKey)")
}

위 코드에서는 파일로 저장된 개인키와 공개키를 불러와 RSA.KeyReferencepemString 메서드를 사용하여 키를 생성합니다. 생성된 키는 변수에 할당되고, 출력하여 확인할 수 있습니다.

참고 자료

이번 글에서는 Swift CryptoSwift 라이브러리를 사용하여 RSA 키 쌍을 불러오는 방법을 알아보았습니다. 암호화와 관련된 작업을 위해 RSA 키 쌍을 사용해야 한다면, 위 코드와 참고 자료를 활용해보세요.