네이버 SMS API에서 요구하는 API Header 부분에는 HmacSHA256을 사용하여 SecretKey를 줘야하는 부분이 있습니다.
이제 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
}
출처
http://wiki.hash.kr/index.php/SHA256
https://losskatsu.github.io/blockchain/sha256/#