Notice
Recent Posts
Recent Comments
Link
투케이2K
637. (ios/swift5) [JOSESwift] encodeAes256GcmJwe : AES 256 JWE 암호화 수행 실시 - A256GCM 본문
IOS
637. (ios/swift5) [JOSESwift] encodeAes256GcmJwe : AES 256 JWE 암호화 수행 실시 - A256GCM
투케이2K 2025. 4. 6. 11:42[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT5

[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Swift5
- 개발 툴 : Xcode
- 기술 구분 : JOSESwift / JWE / 웹 암호화 및 복호화
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// --------------------------------------------------------
// MARK: - [전역 변수 선언]
// --------------------------------------------------------
public static let ACTIVITY_NAME = "C_JWE_Encryption_Module"
private let AES256_GCM_KEY = "0123456789abcdef0123456789abcdef" // [32 바이트]
// --------------------------------------------------------
// MARK: - [AES GCM : JWE 인코딩 수행]
// --------------------------------------------------------
// TODO [Call Method]
// --------------------------------------------------------
/*
DispatchQueue.main.async { // [비동기 요청]
// [딕셔너리 선언]
var dic : Dictionary<String, Any> = [String : Any]()
dic["name"] = "Twok"
dic["age"] = 30
// [Dic To Json Stirng 변환]
let jsonString = C_Util().dic_To_JsonObject_String(_dicData: dic)
// [JWE 암호화 수행]
let encode = C_JWE_Encryption_Module().encodeAes256GcmJwe(payload: jsonString)
}
*/
// --------------------------------------------------------
func encodeAes256GcmJwe(payload: String) -> String {
var returnData = "" // [Return 데이터]
var M_LOG = "" // [Log 데이터]
// -----------------------------------------------
// TODO [1] : [key >> Byte 변환]
// -----------------------------------------------
let keyBytes = self.AES256_GCM_KEY.data(using: .utf8)!
// -----------------------------------------------
// TODO [2] : [JWE 헤더 설정 : A256GCM 사용]
// -----------------------------------------------
/**
* {
* "cty": "application/json",
* "typ": "JWE",
* "enc": "A256GCM",
* "alg": "A256KW"
* }
*/
// -----------------------------------------------
var header = JWEHeader(keyManagementAlgorithm: .A256KW, contentEncryptionAlgorithm: .A256GCM)
header.typ = "JWE"
header.cty = "application/json"
// -----------------------------------------------
// TODO [3] : [페이로드 지정]
// -----------------------------------------------
let message = payload.data(using: .utf8)!
let payload_Object = Payload(message)
// -----------------------------------------------
// TODO [4] : [JWE 인코딩 수행 실시]
// -----------------------------------------------
let encrypter = Encrypter(keyManagementAlgorithm: .A256KW, contentEncryptionAlgorithm: .A256GCM, encryptionKey: keyBytes)!
guard let jwe = try? JWE(header: header, payload: payload_Object, encrypter: encrypter)
else {
M_LOG = "Error :: JWE Encode Error"
S_Log._E_(description: C_JWE_Encryption_Module.ACTIVITY_NAME + " :: encodeAes256GcmJwe :: JWE 인코딩 실패", data: [
"M_LOG :: \(M_LOG)",
"RETURN :: \(returnData)"
])
return returnData
}
// -----------------------------------------------
// TODO [5] : [리턴 정보 확인]
// -----------------------------------------------
returnData = jwe.compactSerializedString // [base64 데이터]
M_LOG = "Success :: JWE Encode"
S_Log._D_(description: C_JWE_Encryption_Module.ACTIVITY_NAME + " :: encodeAes256GcmJwe :: JWE 인코딩 수행", data: [
"M_LOG :: \(M_LOG)",
"RETURN :: \(returnData)"
])
return returnData
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[결과 출력]
// --------------------------------------------------------------------------------------
================================================================
LOG :: TYPE :: LOG :: 🟢
-------------------------------------------------
LOG :: CLASS PLACE :: C_JWE_Encryption_Module.swift :: encodeAes256GcmJwe(payload:) :: 597
-------------------------------------------------
LOG :: NOW TIME :: 2025-04-06 11:09:18
-------------------------------------------------
LOG :: DESCRIPTION :: C_JWE_Encryption_Module :: encodeAes256GcmJwe :: JWE 인코딩 수행
-------------------------------------------------
LOG :: M_LOG :: Success :: JWE Encode
-------------------------------------------------
LOG :: RETURN :: eyJhbGciOiJBMjU2S1ciLCJjdHkiOiJhcHBsaWNhdGlvblwvanNvbiIsImVuYyI6IkEyNTZHQ00iLCJ0eXAiOiJKV0UifQ.tf80F7VQqUpHBZiodKi-ShEmC3B7NUtPPsGg4YTzFGN2qK0I0WNV5A.NFTw2bmNs1E5pwyf.Z13WdkVrNFQBLAixzMKp5uLo6APvJIX3le-9p6jhuH5QlVY.NlQ9A5KgOByBSGs0f81xPw
================================================================
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[라이브러리 설치 참고 사이트]
https://blog.naver.com/kkh0977/223823265351
https://github.com/airsidemobile/JOSESwift
[JWE 개념 설명]
https://blog.naver.com/kkh0977/223817878517?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
반응형