# Go Cheatsheet - Hmac


## Hmac

Use `crypto/hmac` to calculate message authentication code.

#### hmac & use md5 as digest method

```go
package main

import (
	"fmt"
	"crypto/hmac"
	"crypto/md5"
)

func main() {
	key := []byte("hello")
	msg := []byte("world")
	mac := hmac.New(md5.New, key)
	mac.Write(msg)
	digest := mac.Sum(nil)
	fmt.Println(fmt.Sprintf("%x", digest))
}
```

Run:
```
0e2564b7e100f034341ea477c23f283b
```

#### hmac & use sha256 as digest method

```go
package main

import (
	"fmt"
	"crypto/hmac"
	"crypto/sha256"
)

func main() {
	key := []byte("hello")
	msg := []byte("world")
	mac := hmac.New(sha256.New, key)
	mac.Write(msg)
	digest := mac.Sum(nil)
	fmt.Println(fmt.Sprintf("%x", digest))
}
```

Run:
```
f1ac9702eb5faf23ca291a4dc46deddeee2a78ccdaf0a412bed7714cfffb1cc4
```

## Compare to value generated by Python

```python
import hashlib
print(hmac.new(b'hello', b'world', hashlib.md5).hexdigest())
# 0e2564b7e100f034341ea477c23f283b
print(hmac.new(b'hello', b'world', hashlib.sha256).hexdigest())
# f1ac9702eb5faf23ca291a4dc46deddeee2a78ccdaf0a412bed7714cfffb1cc4
```

