티스토리 뷰
목차
1. 공식문서
https://pkg.go.dev/crypto/hmac
hmac package - crypto/hmac - Go Packages
Package hmac implements the Keyed-Hash Message Authentication Code (HMAC) as defined in U.S. Federal Information Processing Standards Publication 198. An HMAC is a cryptographic hash that uses a key to sign a message. The receiver verifies the hash by reco
pkg.go.dev
공식문서에 따르면 아래와 같은 방법으로 암호화 및 비교를 할 수 있습니다.
// 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에 숨겨져 있었습니다.
'개발 > GO' 카테고리의 다른 글
[Dockerfile] golang에서 imagemagick v3 사용하기 (0) | 2022.08.16 |
---|---|
[Golang] defer (0) | 2022.04.04 |
[Golang] 전략(Strategy) 패턴 (0) | 2022.04.01 |
[Golang] 함수 정의 (0) | 2022.03.31 |
[Golang] 조건문과 반복문 (0) | 2022.03.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 드래곤라자
- HMAC
- istio
- 전략패턴
- S3
- IAM
- liquibase
- cloudflare
- flyway
- kubernetes
- eks
- DB형상관리
- AWS
- k8s
- 달러구트 꿈 백화점
- Prometheus
- Auto Scaling
- 쿠버네티스
- Traefik
- Constant
- cka
- kiali
- jaeger
- golang
- grafana
- 프로덕션
- minikube
- production
- VPC
- CloudFront
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함