개발/GO
HMAC sha224, sha256, sha384, sha512 암호화 방법
피클s
2022. 8. 11. 10:45
목차
1. 공식문서
https://pkg.go.dev/crypto/hmac
공식문서에 따르면 아래와 같은 방법으로 암호화 및 비교를 할 수 있습니다.
// ValidMAC reports whether messageMAC is a valid HMAC tag for message.
func ValidMAC(message, messageMAC, key []byte) bool {
mac := hmac.New(sha256.New, key)
mac.Write(message)
expectedMAC := mac.Sum(nil)
return hmac.Equal(messageMAC, expectedMAC)
}
key : 암호화에 사용되는 salt 같은 역할입니다. 암호화 및 복호화때 필요합니다.
message : 실제로 암호화 하고자 하는 문자열입니다.
공식문서에는 sha256으로 암호화하는 방법만 소개되어 있으며, import 정보 또한 없어서 이 글을 작성합니다.
2. SHAxxx 암호화
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"fmt"
)
func main() {
salt := "9e738c26-f4c2-4588-918d-396671ce9a7f"
message := "3ac754ed-eaf5-47e0-851e-dfec501c4005"
compare := "c91378bef38c9eaecfa77ac5133158efd7b5837510ac24c6862ef56a"
mac := hmac.New(sha256.New224, []byte(salt)) // mac 생성
mac.Write([]byte(message)) // 암호화
expectedMAC := hex.EncodeToString(mac.Sum(nil)) // 결과 가져오기 및 문자열로 전환
fmt.Println(compare == expectedMAC)
}
코드형태는 위와 같습니다.
공식문서에서는 hmac.Equal 함수를 사용하는데 저는 정상적으로 검증이 안되어 문자열로 치환 후 비교했습니다.
각 암호화 방법은 import와 hmac.New의 첫번째 인자가 다릅니다.
sha224 | sha256 | sha384 | sha512 | |
import | crypto/sha256 | crypto/sha256 | crypto/sha512 | crypto/sha512 |
method | sha256.New224 | sha256.New | sha512.New384 | sha512.New |
sha224방식은 sha256에 숨겨져 있고, sha384는 sha512에 숨겨져 있었습니다.