티스토리 뷰

목차

     

    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
    링크
    «   2024/07   »
    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 29 30 31
    글 보관함