[iOS] HMAC-SHA-256 시그니처 생성하기

Jehyeon Lee·2023년 11월 28일
0

네이버 SMS API

목록 보기
3/3

네이버 SMS API에서 요구하는 API Header 부분에는 HmacSHA256을 사용하여 SecretKey를 줘야하는 부분이 있습니다.

SHA256이란 ?

  • Secure Hash Algorithm 해시 함수의 한 종류입니다.
  • 해시 함수는 입력 데이터를 고정된 길이의 문자열로 변환하는 함수로, 이 변환된 값은 일반적으로 고유한 특성을 가지며 입력이 조금만 변경되어도 완전히 다른 출력이 생성됩니다.
  • 메시지, 파일, 혹은 데이터 무결성 검증에 널리 사용되는 암호화 해싱 알고리즘입니다.

이제 url과 메시지, secretKey를 가지고 필요한 정보들과 CommonCrypto를 사용하여 제공하는 함수를 가지고 암호화를 진행할겁니다.

완성코드

private func makeSignature() -> String {
        let url = "/sms/v2/services/\(serviceId)/messages"
        let message = method + " " + url + "\n" + timestamp + "\n" + accessKey
        let keyData = secretKey.data(using: .utf8)!
        var macOut = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
        keyData.withUnsafeBytes { keyBytes in
            CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), keyBytes.baseAddress, keyData.count, message, message.utf8.count, &macOut)
        }

        let hmacData = Data(bytes: macOut, count: Int(CC_SHA256_DIGEST_LENGTH))
        let base64Encoded = hmacData.base64EncodedString()
        
        return base64Encoded
    }

코드설명

  • HMAC 및 SHA 알고리즘과 같은 암호화 함수들을 제공하는 CommonCrypto을 사용합니다.
  • url은 네이버 SMS API url에 자신의 서비스 아이디를 넣어야합니다.
    method에는 Swagger에서 제공하는는것 중 하나를 선택해야합니다.
  • https://sens.apigw.ntruss.com/apigw/swagger-ui?productId=plv61henn8&apiId=j5tgfxp2ba&stageId=a0y11xe7vi®ion=KR
  • HMAC-SHA256을 계산하기 위해 CCHmac 함수를 사용하여 HMAC-SHA256 해시를 계산하고 macOut 배열에 저장시킵니다.
  • macOut 배열을 Data 객체로 변환한 다음 base64로 인코딩하여 최종 시그니처를 얻어냅니다.

출처
http://wiki.hash.kr/index.php/SHA256
https://losskatsu.github.io/blockchain/sha256/#

profile
공부한거 느낌대로 써내려갑니당

0개의 댓글

관련 채용 정보