암호화는 개인 정보와 데이터의 안전을 보장하기 위해 필수적인 요소입니다. Swift에서 CryptoSwift 라이브러리를 사용하면 간단하게 암호화를 구현할 수 있습니다. 이번 블로그 포스트에서는 CBC(Cipher Block Chaining) 암호화 모드를 CryptoSwift를 사용하여 구현하는 방법에 대해 알아보겠습니다.
CryptoSwift 설치하기
먼저, CryptoSwift를 설치해야 합니다. Cocoapods를 사용하면 간편하게 라이브러리를 추가할 수 있습니다. 다음 명령어를 터미널에 입력하여 설치해주세요.
$ pod init
그리고 Podfile을 열어 다음과 같이 CryptoSwift를 추가해줍니다.
pod 'CryptoSwift'
마지막으로 다음 명령어를 실행하여 라이브러리를 설치합니다.
$ pod install
CBC 암호화 모드 사용하기
CryptoSwift를 사용하여 CBC 암호화 모드를 구현하는 방법은 다음과 같습니다.
import CryptoSwift
func encryptWithCBC(key: String, iv: String, message: String) -> String? {
// key와 iv를 Data 객체로 변환
guard let keyData = key.data(using: .utf8),
let ivData = iv.data(using: .utf8) else {
return nil
}
// 메시지를 Data 객체로 변환
guard let messageData = message.data(using: .utf8) else {
return nil
}
do {
// AES-256 암호화에 CBC 모드로 설정
let aes = try AES(key: keyData.bytes, blockMode: CBC(iv: ivData.bytes), padding: .pkcs7)
// 암호화
let encrypted = try aes.encrypt(messageData.bytes)
// Base64로 인코딩
let base64 = encrypted.toBase64()
return base64
} catch {
return nil
}
}
func decryptWithCBC(key: String, iv: String, encryptedMessage: String) -> String? {
// key와 iv를 Data 객체로 변환
guard let keyData = key.data(using: .utf8),
let ivData = iv.data(using: .utf8) else {
return nil
}
// Base64로 디코딩
guard let encryptedData = Data(base64Encoded: encryptedMessage) else {
return nil
}
do {
// AES-256 암호화에 CBC 모드로 설정
let aes = try AES(key: keyData.bytes, blockMode: CBC(iv: ivData.bytes), padding: .pkcs7)
// 복호화
let decrypted = try aes.decrypt(encryptedData.bytes)
// UTF-8로 디코딩하여 문자열로 변환
guard let decryptedMessage = String(data: Data(decrypted), encoding: .utf8) else {
return nil
}
return decryptedMessage
} catch {
return nil
}
}
위의 코드에서 encryptWithCBC
함수는 주어진 키(key), 초기화 벡터(iv), 그리고 메시지(message)를 받아서 CBC 암호화로 암호화한 후 Base64 인코딩된 문자열로 반환합니다. decryptWithCBC
함수는 주어진 키(key), 초기화 벡터(iv), 그리고 Base64 인코딩된 암호화된 메시지(encryptedMessage)를 받아서 복호화한 후 원본 문자열로 반환합니다.
사용 예제
let key = "abcdefghijklmnop" // 16바이트
let iv = "1234567890123456" // 16바이트
let message = "Hello, World!"
let encryptedMessage = encryptWithCBC(key: key, iv: iv, message: message)
if let encryptedMessage = encryptedMessage {
print("암호화된 메시지: \(encryptedMessage)")
if let decryptedMessage = decryptWithCBC(key: key, iv: iv, encryptedMessage: encryptedMessage) {
print("복호화된 메시지: \(decryptedMessage)")
} else {
print("복호화 실패")
}
} else {
print("암호화 실패")
}
위의 예제에서는 주어진 키(key)와 초기화 벡터(iv)로 “Hello, World!” 메시지를 CBC 암호화한 후 복호화를 통해 원래의 메시지를 얻어내고 출력합니다.
결론
이렇게 CryptoSwift를 사용하여 Swift에서 CBC 암호화 모드를 구현할 수 있습니다. 데이터를 안전하게 암호화하고 복호화하는 것은 사용자의 개인 정보와 데이터의 보안을 위해 중요한 요소이므로 적절하게 사용하시기 바랍니다.