Notice
Recent Posts
Recent Comments
Link
투케이2K
634. (ios/swift5) [JOSESwift] decodeAes128GcmJwe : AES 128 JWE 복호화 수행 실시 - A128GCM 본문
IOS
634. (ios/swift5) [JOSESwift] decodeAes128GcmJwe : AES 128 JWE 복호화 수행 실시 - A128GCM
투케이2K 2025. 4. 5. 20:11[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT5

[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Swift5
- 개발 툴 : Xcode
- 기술 구분 : JOSESwift / JWE / 웹 암호화 및 복호화
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// --------------------------------------------------------
// MARK: - [전역 변수 선언]
// --------------------------------------------------------
public static let ACTIVITY_NAME = "C_JWE_Encryption_Module"
private let AES128_GCM_KEY = "0123456789abcdef" // [16 바이트]
// --------------------------------------------------------
// MARK: - [AES GCM : JWE 디코딩 수행]
// --------------------------------------------------------
// TODO [Call Method]
// --------------------------------------------------------
/*
DispatchQueue.main.async { // [비동기 요청]
// [JWE 복호화 수행]
let jweString = "eyJhbGciOiJBMTI4S1ciLCJjdHkiOiJhcHBsaWNhdGlvblwvanNvbiIsImVuYyI6IkExMjhHQ00iLCJ0eXAiOiJKV0UifQ.sVN3ew9v18jPSWrMAuLMcCjwhXgtqJMy.OSI_gsoMVsOZejdU.Cd1ZwL5uUczqrm1BnHdhSIyup-QsbPA49YgGBFqwEJ2XNjM.y0FePKGFEKCVaYFUaFqxdg"
let decode = C_JWE_Encryption_Module().decodeAes128GcmJwe(jweString: jweString)
}
*/
// --------------------------------------------------------
func decodeAes128GcmJwe(jweString: String) -> String {
var returnData = "" // [Return 데이터]
var M_LOG = "" // [Log 데이터]
// -----------------------------------------------
// TODO [1] : [key >> Byte 변환]
// -----------------------------------------------
let keyBytes = self.AES128_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: .A128KW, contentEncryptionAlgorithm: .A128GCM, 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 + " :: decodeAes128GcmJwe :: JWE 디코딩 수행", data: [
"M_LOG :: \(M_LOG)",
"RETURN :: \(returnData)"
])
return returnData
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[결과 출력]
// --------------------------------------------------------------------------------------
================================================================
LOG :: TYPE :: LOG :: 🟢
-------------------------------------------------
LOG :: CLASS PLACE :: C_JWE_Encryption_Module.swift :: decodeAes128GcmJwe(jweString:) :: 258
-------------------------------------------------
LOG :: NOW TIME :: 2025-04-05 19:20:01
-------------------------------------------------
LOG :: DESCRIPTION :: C_JWE_Encryption_Module :: decodeAes128GcmJwe :: JWE 디코딩 수행
-------------------------------------------------
LOG :: M_LOG :: Success :: JWE Decode
-------------------------------------------------
LOG :: RETURN :: {
"name" : "Twok",
"age" : 30
}
================================================================
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[라이브러리 설치 참고 사이트]
https://blog.naver.com/kkh0977/223823265351
https://github.com/airsidemobile/JOSESwift
[JWE 개념 설명]
https://blog.naver.com/kkh0977/223817878517?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
반응형