투케이2K

636. (ios/swift5) [JOSESwift] decodeAes192GcmJwe : AES 192 JWE 복호화 수행 실시 - A192GCM 본문

IOS

636. (ios/swift5) [JOSESwift] decodeAes192GcmJwe : AES 192 JWE 복호화 수행 실시 - A192GCM

투케이2K 2025. 4. 6. 11:37

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Swift5

- 개발 툴 : Xcode

- 기술 구분 : JOSESwift / JWE / 웹 암호화 및 복호화

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------

// --------------------------------------------------------
// MARK: - [전역 변수 선언]
// --------------------------------------------------------
public static let ACTIVITY_NAME = "C_JWE_Encryption_Module"

private let AES192_GCM_KEY = "0123456789abcdef01234567" // [24 바이트]



// --------------------------------------------------------
// MARK: - [AES GCM : JWE 디코딩 수행]
// --------------------------------------------------------
// TODO [Call Method]
// --------------------------------------------------------
/*
  DispatchQueue.main.async { // [비동기 요청]
      
      // [JWE 복호화 수행]
      let jweString = "eyJhbGciOiJBMTkyS1ciLCJjdHkiOiJhcHBsaWNhdGlvblwvanNvbiIsImVuYyI6IkExOTJHQ00iLCJ0eXAiOiJKV0UifQ.SK5Pdd7rZdpFnPxcHxC0-GcUu8PFfsNSD4V9NH_lo90.wVrnWT5jWVlESjlG.28JDcM2zLhasuqkCoUmVV2VYEVsU_06pl6doePJ9Iur1_Bs.VrRjkx3iJNkt_fQYJzQVbg"
      
      let decode = C_JWE_Encryption_Module().decodeAes192GcmJwe(jweString: jweString)
      
  }
*/
// --------------------------------------------------------
func decodeAes192GcmJwe(jweString: String) -> String {
    
    
    var returnData = "" // [Return 데이터]
    var M_LOG = "" // [Log 데이터]
    
    
    // -----------------------------------------------
    // TODO [1] : [key >> Byte 변환]
    // -----------------------------------------------
    let keyBytes = self.AES192_GCM_KEY.data(using: .utf8)!
    
    
    // -----------------------------------------------
    // TODO [2] : [디코딩 수행 실시]
    // -----------------------------------------------
    if C_Util().stringNotNull(str: jweString) == true {
        
        do {
          
            let jwe = try JWE(compactSerialization: jweString)
            
            let decrypter = Decrypter(keyManagementAlgorithm: .A192KW, contentEncryptionAlgorithm: .A192GCM, decryptionKey: keyBytes)!
            
            let payload = try jwe.decrypt(using: decrypter)
            
            let message = String(data: payload.data(), encoding: .utf8)!
            
            returnData = message // [리턴 변수 삽입]
            M_LOG = "Success :: JWE Decode"
            
        }
        catch {
            M_LOG = "Exception :: \(error)"
        }
        
    }
    else {
        M_LOG = "Error :: JWE String Is Null"
    }
    
    
    S_Log._D_(description: C_JWE_Encryption_Module.ACTIVITY_NAME + " :: decodeAes192GcmJwe :: JWE 디코딩 수행", data: [
        "M_LOG :: \(M_LOG)",
        "RETURN :: \(returnData)"
    ])
    
    
    return returnData
    
}

// --------------------------------------------------------------------------------------





// --------------------------------------------------------------------------------------
[결과 출력]
// --------------------------------------------------------------------------------------

================================================================
LOG :: TYPE :: LOG :: 🟢
-------------------------------------------------
LOG :: CLASS PLACE :: C_JWE_Encryption_Module.swift :: decodeAes192GcmJwe(jweString:) :: 464
-------------------------------------------------
LOG :: NOW TIME :: 2025-04-06 10:57:40
-------------------------------------------------
LOG :: DESCRIPTION :: C_JWE_Encryption_Module :: decodeAes192GcmJwe :: JWE 디코딩 수행
-------------------------------------------------
LOG :: M_LOG :: Success :: JWE Decode
-------------------------------------------------
LOG :: RETURN :: {
  "age" : 30,
  "name" : "Twok"
}
================================================================

// --------------------------------------------------------------------------------------





// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[라이브러리 설치 참고 사이트]

https://blog.naver.com/kkh0977/223823265351

https://github.com/airsidemobile/JOSESwift


[JWE 개념 설명]

https://blog.naver.com/kkh0977/223817878517?trackingCode=blog_bloghome_searchlist

// --------------------------------------------------------------------------------------
 
반응형
Comments